資料庫概論
回工具列何謂資料(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 //欄位長度 |
資料庫基本操作
資料庫連結(執行結果)
<?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參考資源:
賴屹民譯(2018)。PHP、MySQL與JavaScript學習手冊。台北:碁峰資訊。