SQL Create 2
1. 前言
在上一节中,我们一起学习了 Create 和数据类型,本小节将站在约束
的角度上进一步的探讨 Create 。
2. 约束(Constraints)
约束用于在新建或数据表时,给数据表或数据表中的字段约束条件
。
当然,你也可以把约束理解为修饰
,如 PRIMARY KEY 可以修饰字段为主键,也可以约束该字段非空。
常见的约束有如下几种:
在本小节中,我们将主要介绍 NOT NULL,DEFAULT,UNIQUE,PRIMARY KEY 这些约束的,FOREIGN KEY 会在 Primary Key & Foreign Key 小节详细介绍,而 CHECK 将在 Check 一节中详细探讨。
3. 语法
约束的使用语法如下:
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)则会报错。
请书写 语句,创建imooc_user
表,表共有四个字段,分别是username
,age
,,其中
username
为非空字段,字段认为
0
分。
分析:
imooc_user 表共有四个字段,其中 username 为,使用字符串表示,且每个人的长短不一,为可变短文本,即 varchar,该字段非空,用 NOT NULL 约束;age 代表年龄,是典型的整数类型,即 int; 代表分数,是典型的浮点数类型,即 float,认为 0 分,用 DEFAULT 约束。
语句:
整理可得语句如下:
CREATE TABLE imooc_user( username varchar() NOT NULL, age int, float DEFAULT );
执行成功后,得到 imooc_user 表的信息如下:
+----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | username | varchar(20) | NO | | <null> | | | age | int(11) | YES | | <null> | | | | float | YES | | 0 | | +----------+-------------+------+-----+---------+-------+
5. PRIMARY KEY
PRIMARY KEY,称主键,用于唯一标识
数据表中的每一条记录。
主键必须是唯一的,即每条记录的主键必须各不相同;主键不能为空。
每张数据表都应该有
主键,且每个表只能有
主键。
请书写 语句,新建imooc_user
表,表共有2
字段,分别是id
,username
,其中username
为非空字段,id
字段为主键。
分析:
username 代表,使用字符串表示,且每个人的长短不一,为可变短文本,即 varchar,该字段非空,用 NOT NULL 约束; id 字段作为主键,使用整型,且用 PRIMARY KEY 约束。
语句:
整理可得语句如下:
CREATE TABLE imooc_user( id int PRIMARY KEY, username varchar() 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() 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
。
请书写 语句,新建imooc_user
表,表共有2
字段,分别是username
,age
,其中username
为非空字段,且唯一。
分析:
username 代表,使用字符串表示,且每个人的长短不一,为可变短文本,即 varchar,该字段非空,用 NOT NULL 约束,且该字段唯一,使用 UNIQUE 约束。
语句:
整理可得语句如下:
CREATE TABLE imooc_user( username varchar() 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() 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 这些约束的使用都十分普遍,请务必熟练掌握。
Create 的知识点还是较多的,两节的无法是不够的,你可以在实践中进一步加强对它的理解。