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 的知识点还是较多的,两节的内容无法是不够的,你可以在实践中进一步加强对它的理解。