MySQL教學

資料庫概論

回工具列

何謂資料(Data)?

是指未經過處理的原始記錄。 例如:學生考試的原始成績。

2.資訊(Information) (Information) :

就是有經過「資料處理」的結果。 例如:全班同學成績之排名及分佈圖。

資料處理(Data Processing) (Data Processing)則是將「資料」轉換成「資訊」的一連串 處理過程,而這一連串的處理過程就是先輸入原始資料到「資料庫」 中,再透過「程式」來處理。

例如:成績處理系統。

資料庫

就是儲存資料的地方,這是比較不正式的定義方式。 比較正式的定義:資料庫是由一群相關資料的集合體。

就像是一本電子 書,資料以不重覆的方式來儲存許多有用的資訊,讓使用者可以方便及 有效率的管理所須要的資訊。

什麼是「資料庫管理系統」呢?

其實就是一套管理「資料庫」的軟 體,並且它可以同時管理數個資料庫。

因此,資料庫加上資料庫管理系 統,就是一個完整的 『資料庫系統 』了。

所以,一個資料庫系統 (Database System) (Database System)可分為資料庫(Database) (Database) 與資料庫管理系統 (Database Management System, DBMS) (Database Management System, DBMS)兩個部份。

常見有:Access 、MS SQL Server SQL Server 、Oracle 、Sybase 、 IBM DB2 IBM DB2

4.使用者:一般使用者(End User) (End User)、程式設計師及資料庫管理師 (DBA)。

【定義】 ---它是建立資料庫的第一個步驟 是指提供DBA建立資料格式及儲存格式的能力。亦即設定資料「欄位名 稱」、「資料類型」及相關的「限制條件」。其「資料類型」的種類非 常多。 【例如】文字、數字或日期等等, 此功能類似在「程式設計」中宣告 「變數」的「資料型態」

是針對「資料庫執行」四項功能:

1.新增(INSERT) (INSERT)

2.修改(UPDATE) (UPDATE)

3.刪除(DELETE) (DELETE)

4.查詢(SELECT) (SELECT)

有兩種常見「資料處理系統」:

第一種:檔案系統 以「檔案為導向」的方法,一次只能處理一個檔案,無法同時處理 多個檔案。 【適用時機 】 在「不複雜」的場合使用 【缺點 】每一個應用系統都有自己的所屬檔案,那麼資料便有重覆存 放 、 不一致的問題發生。

第二種:資料庫系統 解決「檔案系統」的缺點 資料庫 的階層是有循序的關係,也就是由小到大的排列,其最小的單位 是Bit(位元),而最大的單位則是DataBase DataBase(資料庫)。

資料依其單位的大小與相互關係分為幾個層次,說明如下: Bit(位元)→Byte(字元)→Field(資料欄)→Record(資料錄) →Table(資料表)→Data Base Data Base(資料庫)。

?>

SQL指令

回工具列

SQL(Structured Query Language:結構化查詢語言),是一種計算機語言,用於存儲,操縱和檢索存儲在關係數據庫中的數據。

SQL 語法不分大小寫(建議大寫),但資料表及欄位名稱有些系統有區分大小寫(建議小寫)

SQL的應用範圍包括資料插入、查詢、更新和刪除,資料庫模式建立和修改,以及資料存取控制。

SQL常用功能

**創建資料庫(已幫同學創建 c+班級+組別,例如201班第1組為c20101)

CREATE DATABASE DatabaseName;

**創建資料表

CREATE TABLE table_name( column1 datatype, column2 datatype, column3 datatype, ..... columnN datatype, PRIMARY KEY( one or more columns ) );
例如:CREATE TABLE student(id SERIAL NOT NULL, stu_class SMALLINT NOT NULL, stu_name VARCHAR NOT NULL, PRIMARY KEY(id));

**加入資料

INSERT INTO `資料表` (‵欄位1‵,‵欄位2‵,‵欄位3‵) VALUES(`資料1`,`資料2`,`資料3`);

例如:要在資料表 student 裡(有欄位 id, stu_class, stu_name 3個欄位),新增資料分別是 id->自動編號, stu_class->204, stu_name->'孫悟空'
INSERT INTO student(id, stu_class, stu_name) VALUES (NULL,204,'孫悟空');
這樣就完成一筆新增的資料了

//如果要輸入的資料順序確認無誤,也可省略欄位名稱,如下:

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

//也可從表單獲取資料

INSERT INTO first_table_name [(column1, column2, ... columnN)] SELECT column1, column2, ...columnN FROM second_table_name [WHERE condition];

修改

語法:UPDATE `資料表` SET ‵欄位2‵='資料2', `欄位3`='資料3' WHERE `欄位1`='資料1'
例如:剛剛新增了一筆 ID=1 的資料進資料庫了,但是孫悟空的班級應該是205班而不是204班,此時我需要將孫悟空 stu_class 欄位改成 205
(錯誤) UPDATE ‵student‵ SET `stu_class`=205 //這樣會修改到整張資料表的這個欄位了!
(正確) UPDATE ‵student‵ SET `stu_class`=205 WHERE stu_name='孫悟空' //這樣會針對 stu_name = '孫悟空' 的資料去做修改。
如果沒有後面的條件式,整張表的 stu_class 欄位都會改成205

刪除

語法:DELETE FROM `資料表` WHERE `欄位`='資料'
EX:
刪除比較簡單,直接找出要刪除資料的資料表以及需要刪除的條件就行了
DELETE ``table` WHERE id=1

查詢

語法:SELECT * FROM `資料表`
語法:SELECT 需要的欄位 FROM `資料表` WHERE `欄位`='資料'
說明:
在 SELECT 語句中,如果想要顯示全部查詢到的欄位就可以使用 * 這個符號,那不想找出全部欄位的話呢,只需要填入欄位的名稱,就只會顯示該欄位的資料了
EX:
SELECT * FROM ‵student‵ WHERE id=1 ->顯示ID = 1所有的欄位資料
SELECT stu_class,stu_name FROM ‵student‵ WHERE id=1 ->顯示 ID = 1 stu_class以及stu_name這兩個欄位的資料

其他SQL功能

**選擇資料庫

USE DatabaseName;

查看資料庫資訊

SHOW DatabaseName;

刪除資料庫

DROP DATABASE DatabaseName;

常見datatype:

CHAR & VARCHAR BINARY

TEXT & TINYTEXT

INT & TINYINT

FLOAT & DOUBLE

DATE & TIME

AUTO_INCREMENT

特殊的值:

NULL & NOT NULL KEY

查看資料庫資訊

DISCRIBE table_name;

刪除資料表

DROP TABLE table_name;

用PHP操作MySQL資料庫

回工具列 網頁樣版
網頁表格樣版
網頁表單樣版
PHP樣版

操作資料庫常用屬性、方法(函式)介紹

完整PHP函式說明
分類 屬性、方法
資料庫 mysqli(主機IP,使用者名稱,密碼,資料庫名稱); //負責與資料庫連結,執行SQL查詢,返回查詢物件
$conn=mysqli("192.168.7.204","c20401","kghs20401","c20401");
$conn->errno //錯誤代碼
$conn->close(); //關閉資料庫
$conn->query("SQL指令"); //查詢資料,產生物件陣列
$result=$conn->query("SELECT * FROM newstu");
$conn->character_set_name() //查詢資料庫設定的資料編碼
$conn->set_charset("utf8") //設定資料庫資料顯示編碼為utf8
$conn->query("set names utf8"); //使用query()函式執行中文編碼設定 utf8
資料表 $resule->num_rows; //資料筆數
$result->field_count; //欄位數
$result->fetch_row(); //陣列型態,用[]存取
***$result->fetch_array(); //關聯陣列,可用位置或名稱存取,參數為 MYSQLI_NUM、MYSQLI_ASSOC、MYSQLI_BOTH
$result->fetch_assoc(); //關聯陣列,用[欄位名稱]存取
fetch_array()、fetch_row()、fetch_assoc()之比較 $result->data_seek($row_number); //跳到第幾筆
$result->free();
資料 $inf=$result->fetch_field(); //傳回第1筆資料欄位
$inf=$result->fetch_fields(); //傳回所有資料欄位
$inf[$n]->name //欄位名稱
$inf[$n]->table //欄位所在的表格
$inf[$n]->type //欄位型態
$inf[$n]->max_length //欄位長度

資料庫基本操作

  • 將連接資料庫之資訊獨立存檔(查看下載),避免駭客從網頁程式碼獲得資訊,入侵資料庫。,以後要使用時用以下指令require_once 'login_109db.php';引用。

資料庫連結(執行結果)

<?php

require_once 'login_109db.php';
$conn=new mysqli($hn,$un,$pw,$db);
if ($conn->error) die("Error!");
else echo "Connect Success!!";
$conn->close();

?>

查詢資料表是否存在(須已連結資料庫)(執行結果)

<?php

require_once('login_109db.php');
$conn=new mysqli($hn,$un,$pw,$db);
if($conn->conn_error)die("Error!");
else echo "Connect Success!!";

 

$query="DESCRIBE student";
$result=$conn->query($query);
if (!$result) die("Error!");
else{ echo "Table exist.";
show tables; }

?>

建立資料表(須已連結資料庫)(執行結果)

<?php

require_once('login_109db.php');
$conn=new mysqli($hn,$un,$pw,$db);
if($conn->conn_error)die("Error!");
else echo "Connect Success!!";

 

$query="CREATE TABLE student(
id SERIAL NOT NULL,
stu_class SMALLINT NOT NULL,
stu_name VARCHAR(10) NOT NULL,
PRIMARY KEY(stu_id)
)";

 

$result=$conn->query($query);
if (!$result) die("Error!");
else echo "Table create success.";

?>

修改資料表(請審慎參考範例須已連結資料庫)(執行結果)

新增資料(須已連結資料庫)(執行結果)

<?php

require_once('login_109db.php');
$conn=new mysqli($hn,$un,$pw,$db);
if($conn->conn_error)die("Error!");

 

$query="INSERT INTO student(id,stu_class,stu_id,stu_name,stu_seat)

VALUES (NULL,204,'108999','王皆富',1)";

$result=$conn->query($query);

if (!$result) die("Error!");

else echo "Data insert success.";

?>

從別的資料庫匯入資料

列出所有資料(須已連結資料庫)(執行結果)

<?php

require_once('login_109db.php');
$conn=new mysqli($hn,$un,$pw,$db);
if($conn->conn_error)die("Error!");

 

$query="SELECT * FROM student order by stu_class";

$result=$conn->query($query);

if (!$result) die("Error!");
else echo "Data select success.";
$rows = $result->num_rows;

 

echo "<table>"; echo "<caption>學生名冊</caption>";
echo " <tr>";
echo " <th>ID</th>";
echo " <th>班級</th>";
echo " <th>姓名</th>";
echo "</tr>";
for ($i=0;$i<$rows;++$i)
{
$row=$result->fetch_array(MYSQLI_NUM);
echo "<tr>";
echo "<td>".$row[0]."</td>";
echo "<td>".$row[1]."</td>";
echo "<td>".$row[2]."</td>";
echo "</tr>";
}
echo "</table>";

?>

查詢學生個人資料(查詢範例)

範例下載:Look0.php  Look1.php

參考資源:

SQL教學

資料庫導論

賴屹民譯(2018)。PHP、MySQL與JavaScript學習手冊。台北:碁峰資訊。