一些基礎常見的 SQL 語法。
創建#
創建資料庫#
創建使用的是「CREATE
」語法:
1CREATE DATABASE `資料庫名稱`;
創建資料表及欄位#
由於要先指定資料庫才能使用裡面的資料表,所以先選擇資料庫:
1USE `資料庫名稱`;
之後創建資料表,創建格式如下:
1CREATE TABLE `資料表名稱`(
2 `欄位1名稱` 資料型態(長度) 屬性1 屬性2...,
3 `欄位2名稱` 資料型態(長度) 屬性1 屬性2...,
4 ...
5);
範例#
1CREATE TABLE `資料表名稱`(
2 `id` int AUTO_INCREMENT PRIMARY KEY,
3 `phone` char(10),
4 `name` varchar(20) DEFAULT 'Anonymous',
5 `age` int(3) NOT NULL
6);
語法說明#
欄位格式為「欄位名稱
資料類別(長度)
屬性1
屬性2...
」。每筆資料以「,
」區隔。
欄位「
id
」為「int
」表示「整數
」,範圍為「-2,147,483,648
~2,147,483,647
」。
屬性 「PRIMARY KEY
」則表示主鍵
,同時加上「AUTO_INCREMENT
」使其能在新增一筆新資料時,自動累加 id 以確保資料筆之間的 id 值唯一。欄位「
phone
」為「char
」表示「字元
」,最大字元長度為「255
」。在後方有「(10)
」則限制其長度為 10 。(ps. 若長度不足
10 則會自動補足 10,總之在儲存上佔用的容量是固定的
)而「
name
」欄位同樣是字元,但寫作「varchar
」,最大字元長度為「65535
」,差別在於資料儲存上,varchar(20)
指的是若字元長度不足 20 ,則只會佔用資料的字元長度大小
,相較於「char
」更為彈性,通常建議使用這個類別而非「char
」。
屬性「DEFAULT
」意思為「預設
」。在新增資料筆時,若沒有指定該欄位的情況下,會自動寫入預設值,舉上述例子,當沒有指定「name
」欄位寫入時,該欄位將自動寫入「Anonymous
」。最後的「
age
」欄位屬性「NOT NULL
」表示該欄位不能為空值
。
若要表示該資料可以為空,則使用「NULL
」屬性。
若沒有特別指定,則使用系統預設,通常為「NULL
」屬性。
(ps.id
雖然沒有該屬性,但PRIMARY KEY
屬性本身就自帶NOT NULL
了)
另外,你也可以將欄位格式寫好後,在最後才將其定義為主鍵:
1CREATE TABLE `資料表名稱` (
2 `id` int AUTO_INCREMENT,
3 ...
4 PRIMARY KEY(`id`)
5);
新增#
想要在資料表內新增資料筆,則需要用到「INSERT
」語法:
1INSERT INTO `資料表名稱`(`欄位1`, `欄位2`,...)
2VALUES (欄位1的值, 欄位2的值...);
填寫值的順序是對應前面欄位順序的。
這邊要特別注意的是,兩行之間並沒有「,
」或「;
」區隔。
本質上它算是一行,只是為了提高可讀性
,所以習慣寫作兩行或以上。
(ps. 另外,舉上述例子,我們不需要在新增時手動寫入「id
」欄位,因為「AUTO_INCREMENT
」會自動寫入。)
範例#
舉上述創建
例子中的資料表為例:
1INSERT INTO `資料表名稱`(`phone`, `name`, `age`)
2VALUES ("0123456789", "新之助", 5);
會寫入以下資料:
id | phone | name | age |
---|---|---|---|
1 | 0123456789 | 新之助 | 5 |
再寫入一筆,但這次只指定必要的欄位「age
」:
1INSERT INTO `資料表名稱`(`age`)
2VALUES (19);
目前資料為:
id | phone | name | age |
---|---|---|---|
1 | 0123456789 | 新之助 | 5 |
2 | NULL | Anonymous | 19 |
- 由於
id
欄位的「AUTO_INCREMENT
」屬性,所以自動累加上一筆資料的id
。 - 欄位
phone
並未指定,而又不存在預設值,因此為NULL (空值)
。 - 欄位
name
並未指定,但存在預設值「Anonymous
」,因此寫入預設值。 - 欄位
age
指定為19
。
但如果這麼寫:
1INSERT INTO `資料表名稱`(`name`, `phone`)
2VALUES ("小葵", "0987654321");
會發生什麼事情?
答案是噴一個錯誤 - Field 'age' doesn't have a default value
還記得剛剛創建資料表時,設置了 age
欄位為「NOT NULL
」屬性嗎?
而在此並未給予 age
值,而 age
又不存在「DEFAULT
」預設值,因此出錯。