講到現在好像是時候回去解釋,到底要怎麼樣用SQL設定並創建資料庫,並且又要怎麼樣用SQL來新增、更改和刪除資料庫裡面的資料呢。
在資料庫管理系統裡面,可以存在多個資料庫;每一個資料庫中,也含有多個關係表;而每一個關係表裡面就存放著一筆一筆的資料。這個觀念應該從蠻前面就慢慢的已經習慣了吧!讓我們重新看一段在第五天請讀者先打入 MySQL 的指令,現在我們回過頭來解釋。這邊我只擷取片段,其他的部分應該可以以此類推!
Create Database myShop;
use myShop;
Create table Menu (
MenuID varchar(4) Not Null,
Item varchar(100) Not Null,
Price integer Not Null,
TypeID varchar(4)
);
我們先看第五天撰寫的前三段指令。之所以知道這裡有三個段是因為我們看到了三個分號。第一個分好非常的直白酒是創建資料庫,在 create database
兩個關鍵詞彙後面出現的 myShop
就是我為這一個資料庫命名的資料庫名稱。第二段指令就是選取這一個資料庫,一般來說這一個指令只需要在開啟資料庫管理系統的當下告知即可。接下來就是創建關係表了。
在第二天的內容當中,我有解釋資料庫中的關係表必須要有一個定義好的綱要,並且這些綱要裡面的每個屬性 (Attribute) 都要事先預設好他的限制,所以在上述的SQL指令當中,我們在做的事情就是告訴資料庫,我現在定義的這個關係表叫什麼、每一個資料屬性是什麼、有哪些限制。
在這裡我創立了一個名字叫做 Menu 的關係表,這一個關係表有4個屬性,分別是 MenuID、Item、Price 和 TypeID。在每一個屬性的後面馬上接續的,就是這一個屬性的限制,我們可以看到除了Price以外這裡的資料屬性限制都是 varchar。這個 varchar 指的是輸入這一個欄位的資料可以擁有的字元,在這裡我分別定義了4個字元、100個字元含4個字元 (對於其他種類的字元要怎麼定義,可以Google大神這邊暫時不作深入的討論),相對的這裡的 Price 使用的就是整數 integer 來儲存。在這邊我也同時定義了前面三個資料屬性都不可以是空白值。如果回去看第五天的那一串指令,會發現我在某一些地方使用的是 Default Null
這個指令,表示如果在輸入資料時沒有給定任何資料,關係表會預設該欄的資料為 Null
,也就是空白值。
接下來我們來看看要怎麼樣更新或修改關係表的綱要。在SQL當中,我們使用 Alter Table 來對資料庫現有的綱要做更動,舉例來說,現在我們在Menu關係表中想加入一列標註正在特價的商品,這時候我們就可以用下面這個指令新增一個新的欄位。
Alter table menu
add onSale boolean
After typeID;
這裡的指令是選擇我們要跟動的關係表然後加入欄位名稱以及這個欄位的資料格式限制最後選定插入的位置。這時候我們也順便設定前面忘記標註的 Primary Key — MenuID。這時候我們可以用 Describe Table
查看關係表的綱要。
Alter table menu
add primary key (MenuID);
Describe menu;
一樣這個小姐我們重新看一下第五天使用插入資料的指令:
Insert into Menu (MenuID, Item, Price, TypeID) Values
("M001", "Lemon Cake", 80, "T001"),
("M002", "Oolong Tea", 30, "T002"),
("M003", "Cheese Cake", 75, "T001"),
("M004", "Green Tea", 30, "T002"),
("M005", "Milk Tea", 40, "T002"),
("M006", "Magic Cookies", 99, NULL);
這一段指令應該滿前顯易懂的。第一行先選定我們要插入資料的關係表名稱,並且將插入資料的欄位名稱按照順序逐一寫下,並在 Values
後面列舉資料。其實插入資料的語法還蠻多種的,會因為插入的資料不同,可以簡寫部分的SQL指令。例如,當我插入的資料完全符合關係表中的每一個欄位,我在第一行並不用特別標註資料表的欄位。又或是如果這個欄位其實有預設值,我也可以只插入需要特別註明資料的欄位。另外因為我們在上面的指令有明確的給出欄位的名稱,所以並不需要按照資料關係表的欄位放入資料,只需要確定在插入資料的指令中,欄位順序和下面插入的資料欄位有相護正確的呼應就可以了。所以相同的指令我也可以把價格拿到第一位改寫成:
Insert into Menu (Price, MenuID, Item, TypeID) Values
(80, "M001", "Lemon Cake", "T001"),
(30, "M002", "Oolong Tea", "T002"),
(75, "M003", "Cheese Cake", "T001"),
(30, "M004", "Green Tea", "T002"),
(40, "M005", "Milk Tea", "T002"),
(99, "M006", "Magic Cookies", NULL);
因為我們上面剛剛已經加入了新的一個欄位,所以可以用下面這個方式針對資料更新
Update menu
set onSale = True
where menuID = 'M001';
Select * from Menu;
這裡我們發現編號 M001
的 onSale
空白值變成了 1。我們設定這個欄位是布林值會自動轉換,把 True
變成了 1,可想而知如果值是 False
那他的顯示值就會是 0。
既然資料可以加入和更新資料就可以被刪除所以刪除資料的指令就像下面這個樣子。
Delete from menu
where menuID = 'M006';
同樣的如果我們想要把一整個關係表給刪除的話也可以用drop這個指令快速的達成。
Drop table menu;
記得如果把關係表刪掉的讀者,可以從本文上面重新執行指令把 Menu Table 建立回來啊!