一、主键约束
要求:
主键约束要求字段的值在全表必须唯一,而且不能为 null 值;
建议主键一定要使用数字类型,因为数字的简述速度会非常的快;
如果主键是数字类型,还可以设置自动增长;
例如:
CREATE TABLE t_teacher(
id INT PRIMARY KEY AUTO_INCREMENT,
...
);
二、非空约束
要求:
非空约束要求字段的值不能为NULL值;
NULL值是没有数据的意思,而不是空字符串;
CREATE TABLE t_teacher(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(200) NOT NULL,
married BOOLEAN NOT NULL DEFAULT FALSE # 设置一个默认值false
);
其中
boolean
类型会被映射成TINYINT
这个数据类型,则 false 则为 0,true 为 1 。
三、唯一约束
要求:
- 唯一约束要求字段值如果不为
NULL
,那么在全表必须唯一。
例如:
CREATE TABLE t_teacher(
...
tel CHAR(11) NOT NULL UNIQUE # 加上关键字 UNIQUE 即可
);
四、外键约束
要求:
外键约束用来保证关联数据的逻辑关系。
对于有父子关系的两张表而言,子表中需要有外键约束的定义;
例如:
父表 - 部门表
CREATE TABLE t_dept(
deptno INT UNSIGNED PRIMARY KEY,
dname VARCHAR(20) NOT NULL UNIQUE,
tel CHAR(4)
);
子表 - 员工表
外键约束的定义是写在子表上的
CREATE TABLE t_emp(
empno INT UNSIGNED PRIMARY KEY,
ename VARCHAR(20) NOT NULL,
sex ENUM("男","女") NOT NULL,
deptno INT UNSIGNED NOT NULL,
hiredate DATE NOT NULL,
FOREIGN KEY (deptno) REFERENCES t_dept(deptno)
# FOREIGN KEY + 外键字段的名称 + REFERENCES + 父表(父表中进行关联的字段)
);
注意:
使用外键约束可能会造成的闭环问题,即如果多张表如果形成了外键闭环的话,我们将无法删除任何一张表的记录。