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