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表,表共有四个字段,分别是usernameagescore,其中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字段,分别是idusername,其中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 表中的idusername为联合主键,则其新建语句如下:

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字段,分别是usernameage,其中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 表中的usernameage为联合唯一字段,语句如下:

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