二、MySQL 用戶端連線工具 mysql
說明:
mysql 是與 MySQL 資料庫連線的用戶端工具,透過執行 mysql 指令,我們可以執行許多資料庫操作與管理的工作。
執行:
1. 進入系統之後,輸入以下的指令:
mysql -p
2. 在 Enter Password: 提示,輸入你的 mysql 密碼。
建立與刪除資料庫及資料表:
一、建立資料庫
1. 在 mysql 提示,輸入:
create database lib13; 按 Enter
醬子,就會在 MySQL建立一個名為 lib13 的資料庫。
說明:
1. create database 資料庫名稱 是 MySQL 建立資料庫的命令,後面接資料庫的名稱。
2. 切記:所有的 mysql 命令後面必須加分號 ; ,分號在 mysql 中代表 命令的結束點。必須要有分號才算完整的一個 mysql 命令。
3. 在課程所使用的帳號中,已經設定好權限,每個人只能建立與自己帳號同名的資料庫。如果,你的帳號是 lib1。請輸入 create database lib1。
二、秀出所有資料庫
程式執行結果:
1. 在 mysql 提示,輸入:
show databases; 按 Enter
醬子,就會秀出這台 MySQL 主機中,所有的資料庫名稱。
說明:
1. show databases 是 MySQL 秀出資料庫的命令。
2. 切記:databases 是複數,後面必須加 s ,否則便是語法錯誤。
三、選用資料庫:
1. 在 mysql 提示,輸入:
use lib13; 按 Enter
醬子, MySQL 就知道你現在要使用的資料庫是 lib13。
說明:
1. use 資料庫名稱; 是 MySQL 選取資料庫的命令。
2. 請選用你剛剛所建立的資料庫,因為權限設定的關係,你只能使用你剛剛建立的資料庫。
四、建立資料表:
1. 在 mysql 提示,輸入:
create table Test ( 按 Enter
id int primary key auto_increment, 按 Enter
name varchar(16) 按 Enter
); 按 Enter
醬子, MySQL 就會在現在所選用的資料庫,產生一個 Test 資料表。在這個資料表中,有兩個欄位:id 和 name 。id的資料型態是整數(INT),同時,也是 Test 資料表的主索引欄位 (primary key),並且再新增紀錄時,會自動遞增 (auto_increment)。name的資料型態是可變長度的字元,最多可放16個字元 (VARCHAR(16))。
原則上,我們可以使用 mysql 的工具,進入到 mysql 提示下,以互動的方式,先建立資料庫,再建立資料表,然後再匯入文字檔中的資料。但是,這樣做有個缺點,就是在輸入命令時難免會打錯字。每次重打會很不方便。所以,我們使用另一種技巧,就是使用 Linux Shell 的重導輸入的方式,將 mysql 指令導入到 mysql 環境,作批次的執行。這種技巧在資料庫的備份與還原時,以及將資料庫移轉到其他機器上時,也很常用。不過,在撰寫 MySQL 的 Script 檔之前,我們先設定 EditPlus 的 MySQL 的語法檔。
實作:設定 EditPlus 的 MySQL 的語法檔
1. 啟動 EditPlus。
2. 執行選單中的 File | New | Others。
3. Select File Type選擇 MySQL,然後按 OK按鈕。
4. 輸入以下的 MySQL 命令碼:
QUOTE:
# 產生資料庫
Create Database lib13;
# 選用資料庫
use lib13;
# 產生 Guestbook 資料表
Create Table Guestbook(
id int primary key auto_increment,
name varchar(32) not null,
email varchar(64),
web varchar(128),
content text,
post_time datetime not null,
fk_icon int not null
);
# 將 GuestbookOut.txt 中的內容載入到 Guestbook 資料表
LOAD DATA LOCAL INFILE "Guestbook.txt"
INTO TABLE Guestbook
FIELDS
TERMINATED BY ','
ENCLOSED BY '"'
(name, email, web, content, post_time, fk_icon);
程式說明:
# 是 MySQL 的註解符號。
Load Data 的用法:
格式:
LOAD DATA LOCAL INFILE 資料文字檔
INTO TABLE 資料表名稱
FIELDS
TERMINATED BY <char A>
ENCLOSED BY <char A>
(欄1, 欄2, 欄3, ...欄n);
TERMINATED BY <char A> 表示以字元A, 作為輸入資料的欄位分隔字元, 字元前後以單引號框住.
ENCLOSED BY <char A> 表示以字元A, 作為輸入資料的文字欄位字串辨識符號, 字元前後以單引號框住.
*/
四、匯入資料
說明:
MySQL的Script檔完成後,我們就可以將Script檔和資料的文字檔,上傳到資料庫主機中。接著使用 Linux Shell 的重導輸入的方式,將資料匯入到 MySQL資料庫中。
實作:匯入資料
1. 使用EditPlus的檔案上傳功能,將 db.sql 及 Guestbook.txt上傳到資料庫主機。
2. 使用Putty連線到主機。
3. 使用 cd 指令,切換到之前上傳的目錄中。
4. 在 Linux Shell 執行以下的指令,將資料匯入到 MySQL 資料庫:
mysql -p<db.sql
5. 輸入你的MySQL密碼後,完成匯入。
實作:檢查資料是否已匯入成功
1. 在 Linux Shell 執行以下的指令:
mysql -p
2. 輸入你的密碼後,進入 mysql 提示。
3. 在mysql 提示下,輸入以下的命令,秀出所有資料庫。
show databases;
4. 在mysql 提示下,輸入以下的命令,選用匯入的資料庫。
use lib13;
5. 在mysql 提示下,輸入以下的命令,秀出資料庫中所有的資料表。
show tables;
6. 在mysql 提示下,輸入以下的命令,秀出 Guestbook 資料表各欄位的定義。
describe Guestbook;
資料庫的備份、還原、與移轉
說明:
資料庫的備份、還原、與移轉,除了是資料庫管理者的日常重要工作之外,對程式開發者而言,也是一個非常重要的技能。在實務上,多數的小型專案,客戶通常並沒有設置資料庫管理師,來幫你處理這些事情;就算有,你要取得資料庫管理師的幫助時,你也必須要會一些基本的資料庫操作技能,才能讓你和對方在工作上的溝通與合作愉快。資料庫的備份,在這只教導 MySQL的 mysqldump指令的使用。使用 mysqldump 配合 Linux Shell的重導輸出,就可以把資料庫的資料匯出成 MySQL Script檔案。之後,你就可以使用這個檔案,用之前 mysql 配合Linux Shell 的重導輸入的方式,將資料庫還原;或者,將這個檔案,複製到其他的機器,匯入到其他機器的 MySQL資料庫中。
1. 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id=3;
2. 按 Enter 鍵,執行 SQL 命令。
3. 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id!=3;
4. 按 Enter 鍵,執行 SQL 命令。
5. 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id>3;
6. 按 Enter 鍵,執行 SQL 命令。
7. 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id>=3;
8. 按 Enter 鍵,執行 SQL 命令。
9. 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id<3;
10. 按 Enter 鍵,執行 SQL 命令。
11. 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id<=3;
12. 按 Enter 鍵,執行 SQL 命令。
13. 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id>2 AND fk_icon=2;
14. 按 Enter 鍵,執行 SQL 命令。
15. 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id=1 OR id=4;
16. 按 Enter 鍵,執行 SQL 命令。
17. 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE email like 'au%';
18. 按 Enter 鍵,執行 SQL 命令。
19. 在 mysql 提示下輸入:
SELECT id, name, email FROM Guestbook WHERE email like '%e%';
20. 按 Enter 鍵,執行 SQL 命令。
四、ORDER BY 子句
句型:
QUOTE:
SELECT 欄位 FROM 資料表 [WHERE 子句] ORDER BY 欄位 [排序方式]
1. 在 mysql 提示下輸入:
SELECT id, name, email FROM Guestbook ORDER BY fk_icon DESC;
2. 按 Enter 鍵,執行 SQL 命令。
3. 在 mysql 提示下輸入:
SELECT id, name, email FROM Guestbook ORDER BY 2 DESC;
4. 按 Enter 鍵,執行 SQL 命令。
五、LIMIT 子句
句型:
QUOTE:
SELECT 欄位 FROM 資料表 [WHERE 子句] [ORDER BY 子句] LIMIT [起始值, ] 紀錄筆數
1. 在 mysql 提示下輸入:
INSERT INTO Guestbook VALUES(10, 'george', 'george@igt.com.tw', 'www.test.com', 'hello there', NOW(), 2);
2. 按 Enter 鍵,執行 SQL 命令。
3. 在 mysql 提示下輸入:
SELECT * FROM Guestbook;
4. 按 Enter 鍵,執行 SQL 命令。並觀察新增資料的結果。
二、新增單筆資料(指定欄位)
句型:
QUOTE:
INSERT INTO 資料表(欄位1, 欄位2, ...,欄位N) VALUES(值1, 值2, ..., 值N)
說明:
1. 資料表後面的括弧中的欄位列表,必須與 VALUES裡面的值列表,數目、順序、與資料型態配合。
2. 資料表後面的括弧,不需要列示資料表中的所有欄位,順序也不需要和資料表本身的欄位相同。
3. 資料表欄位的定義中,如果是 NOT NULL,非自動增量,又沒有設定預設值,同時又沒有定義 Default預設值的話,在新增時,一定要把這個欄位列示出來。
實作:
1. 在 mysql 提示下輸入:
INSERT INTO Guestbook (name, fk_icon)VALUES('mary', 3);
2. 按 Enter 鍵,執行 SQL 命令。
3. 在 mysql 提示下輸入:
SELECT * FROM Guestbook;
4. 按 Enter 鍵,執行 SQL 命令。並觀察新增資料的結果。
三、新增多筆資料
句型:
QUOTE:
INSERT INTO 資料表[欄位列表] VALUES(值列表), (值列表)...
說明:
1. 要新增多筆欄位時,在VALUES之後,每筆資料的值列表,前後以括號框住,並以逗號作區隔。
實作:
1. 在 mysql 提示下輸入:
INSERT INTO Guestbook (name, fk_icon)VALUES('jay', 2), ('jolin', 1);
2. 按 Enter 鍵,執行 SQL 命令。
3. 在 mysql 提示下輸入:
SELECT * FROM Guestbook;
4. 按 Enter 鍵,執行 SQL 命令。並觀察新增資料的結果。
1. 在 mysql 提示下輸入:
UPDATE Guestbook SET fk_icon=2, web='www.twisu.com.tw';
2. 按 Enter 鍵,執行 SQL 命令。
3. 在 mysql 提示下輸入:
SELECT * FROM Guestbook;
4. 按 Enter 鍵,執行 SQL 命令。並觀察新增資料的結果。
二、更新特定資料
句型:
QUOTE:
UPDATE 資料表 SET 欄位1= 值1, 欄位2=值2, 欄位3=值3 WHERE 條件
說明:
1. 要更新特定資料時,可以在後面加上 WHERE條件子句,來限定要更改的紀錄。
實作:
1. 在 mysql 提示下輸入:
UPDATE Guestbook SET email=Concat(name, '@twisu.com.tw') WHERE id > 9;
2. 按 Enter 鍵,執行 SQL 命令。
3. 在 mysql 提示下輸入:
SELECT * FROM Guestbook;
4. 按 Enter 鍵,執行 SQL 命令。並觀察新增資料的結果。
class Guestbook extends DB{
// 定義屬性
/ 通常可以用所要存取的資料表的各個欄位,作為這個類別的屬性
var $id;
var $name;
var $email;
var $web;
var $content;
var $post_time;
var $fk_icon;
class Guestbook extends DB{
// 定義屬性
/ 通常可以用所要存取的資料表的各個欄位,作為這個類別的屬性
var $id;
var $name;
var $email;
var $web;
var $content;
var $post_time;
var $fk_icon;
上面的表格中,並沒有在核心模組中,定義有關邏輯層的類別。這是因為各子系統除了在存取資料庫時,具有共同的功能需求之外,其他部分,到目前為止,還沒有發現需要在核心中,另行撰寫一個父類別來定義共同的屬性及功能。何況,因為所有子系統的類別均需繼承 DB 這個父類別。如果,真有需要的話,可以視情況需要,在 DB 父類別中,再來定義額外的屬性及方法。