04 SQL Create 2
1. 前言
在上一節中,我們一起學習了 SQL Create 和資料型別,本小節將站在SQL約束
的角度上進一步的探討 Create 。
2. SQL 約束(Constraints)
SQL 約束用於在新建或修改資料表時,給資料表或資料表中的欄位加上約束條件
。
當然,你也可以把約束理解為修飾
,如 PRIMARY KEY 可以修飾字段為主鍵,也可以約束該欄位非空。
常見的約束有如下幾種:
約束 | 作用 |
---|---|
NOT NULL | 欄位非空 |
DEFAULT | 欄位預設值 |
UNIQUE | 欄位唯一 |
PRIMARY KEY | 主鍵 |
FOREIGN KEY | 外來鍵 |
CHECK | 校驗欄位 |
在本小節中,我們將主要介紹 NOT NULL,DEFAULT,UNIQUE,PRIMARY KEY 這些約束的用法,FOREIGN KEY 會在 SQL Primary Key & Foreign Key 小節詳細介紹,而 CHECK 將在 SQL Check 一節中詳細探討。
3. 語法
SQL 約束的使用語法如下:
CREATE TABLE [table_name]
(
[col1] [datatype1] [constraints1],
[col2] [datatype2] [constraints2],
[col3] [datatype3] [constraints3] ,
....,
[constraints4]
);
其中table_name
是資料表名稱,col
表示欄位名,datatype
表示欄位型別,constraints
代表約束,它們的數字字尾 1,2 表示多個欄位以及多個約束。
提示: 約束既可以在欄位上,也可以在表上。一個欄位,或者一張表可以有多個約束。
4. NOT NULL,DEFAULT
NOT NULL,DEFAULT 是兩個頗為簡單的約束。
DEFAULT 會給欄位新增上預設值,若欄位在新增的時候沒有指定值,則使用預設值。
NOT NULL 表示一個欄位是非空的,當在插入或者修改時,如果欄位為空(NULL)則會報錯。
4.1 例1 新建 imooc_user 表1
請書寫 SQL 語句,建立imooc_user
表,表共有四個欄位,分別是username
,age
,score
,其中username
為非空欄位,score
欄位預設為0
分。
分析:
imooc_user 表共有四個欄位,其中 username 為使用者名稱,使用字串表示,且每個人的使用者名稱長短不一,為可變短文字,即 varchar,該欄位非空,用 NOT NULL 約束;age 代表年齡,是典型的整數型別,即 int;score 代表分數,是典型的浮點數型別,即 float,預設為 0 分,用 DEFAULT 約束。
語句:
整理可得語句如下:
CREATE TABLE imooc_user
(
username varchar(20) NOT NULL,
age int,
score float DEFAULT 0
);
執行成功後,得到 imooc_user 表的資訊如下:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(20) | NO | | <null> | |
| age | int(11) | YES | | <null> | |
| score | float | YES | | 0 | |
+----------+-------------+------+-----+---------+-------+
5. PRIMARY KEY
PRIMARY KEY,中文稱主鍵,用於唯一標識
資料表中的每一條記錄。
主鍵必須是唯一的,即每條記錄的主鍵必須各不相同;主鍵不能為空。
每張資料表都應該有
一個主鍵,且每個表只能有
一個主鍵。
5.1 例2 新建 imooc_user 表2
請書寫 SQL 語句,新建imooc_user
表,表共有2
欄位,分別是id
,username
,其中username
為非空欄位,id
欄位為主鍵。
分析:
username 代表使用者名稱,使用字串表示,且每個人的使用者名稱長短不一,為可變短文字,即 varchar,該欄位非空,用 NOT NULL 約束; id 欄位作為主鍵,使用整型,且用 PRIMARY KEY 約束。
語句:
整理可得語句如下:
CREATE TABLE imooc_user
(
id int PRIMARY KEY,
username varchar(20) NOT NULL
);
執行成功後,表的資訊如下:
+----------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | <null> | |
| username | varchar(20) | NO | | <null> | |
+----------+------------------+------+-----+---------+-------+
PRIMARY KEY 也可用於約束多個欄位,即聯合主鍵
。
修改上面的例子,若 imooc_user 表中的id
和username
為聯合主鍵,則其新建語句如下:
CREATE TABLE imooc_user
(
id int,
username varchar(20) NOT NULL,
CONSTRAINT user_pk PRIMARY KEY(id,username)
);
操作成功後,imooc_user 表資訊如下:
+----------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| id | int | NO | PRI | <null> | |
| username | varchar(20) | NO | PRI | <null> | |
+----------+------------------+------+-----+---------+-------+
注意: 當使用聯合主鍵約束的時候,必須顯示地用 CONSTRAINT 指定 user_pk 是聯合主鍵。
6. UNIQUE
UNIQUE,用於唯一標識
資料表中的每一條記錄。
UNIQUE 約束的欄位必須是唯一的,即該欄位在每條記錄中必須各不相同。PRIMARY KEY 約束預設擁有 UNIQUE 約束。
每個表可以有多個UNIQUE
約束,但是隻能有一個PRIMARY KEY
。
6.1 例3 新建imooc_user表3
請書寫 SQL 語句,新建imooc_user
表,表共有2
欄位,分別是username
,age
,其中username
為非空欄位,且唯一。
分析:
username 代表使用者名稱,使用字串表示,且每個人的使用者名稱長短不一,為可變短文字,即 varchar,該欄位非空,用 NOT NULL 約束,且該欄位唯一,使用 UNIQUE 約束。
語句:
整理可得語句如下:
CREATE TABLE imooc_user
(
username varchar(20) UNIQUE NOT NULL,
age int
);
執行成功後,表的資訊如下:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(20) | NO | PRI | <null> | |
| age | int(11) | YES | | <null> | |
+----------+-------------+------+-----+---------+-------+
UNIQUE 也可用於約束多個欄位,即聯合唯一鍵
。
修改上面的例子,若 imooc_user 表中的username
和age
為聯合唯一欄位,語句如下:
CREATE TABLE imooc_user
(
username varchar(20) NOT NULL,
age int,
CONSTRAINT username_age UNIQUE(username,age)
);
建立成功後,imooc_user 表資訊如下:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(20) | NO | MUL | <null> | |
| age | int(11) | YES | | <null> | |
+----------+-------------+------+-----+---------+-------+
7. 小結
- PRIMARY KEY 、UNIQUE 和 NOT NULL 這些約束的使用都十分普遍,請務必熟練掌握。
- SQL Create 的知識點還是較多的,兩節的內容無法是不夠的,你可以在實踐中進一步加強對它的理解。