4.jpg

一、主键约束

要求:

  1. 主键约束要求字段的值在全表必须唯一,而且不能为 null 值;

  2. 建议主键一定要使用数字类型,因为数字的简述速度会非常的快;

  3. 如果主键是数字类型,还可以设置自动增长;

例如:

  1. CREATE TABLE t_teacher(
  2. id INT PRIMARY KEY AUTO_INCREMENT,
  3. ...
  4. );

二、非空约束

要求:

  1. 非空约束要求字段的值不能为NULL值;

  2. NULL值是没有数据的意思,而不是空字符串;

    1. CREATE TABLE t_teacher(
    2. id INT PRIMARY KEY AUTO_INCREMENT,
    3. name VARCHAR(200) NOT NULL,
    4. married BOOLEAN NOT NULL DEFAULT FALSE # 设置一个默认值false
    5. );

    其中 boolean 类型会被映射成 TINYINT 这个数据类型,则 false 则为 0,true 为 1 。

三、唯一约束

要求:

  1. 唯一约束要求字段值如果不为NULL,那么在全表必须唯一。

例如:

  1. CREATE TABLE t_teacher(
  2. ...
  3. tel CHAR(11) NOT NULL UNIQUE # 加上关键字 UNIQUE 即可
  4. );

四、外键约束

要求:

  1. 外键约束用来保证关联数据的逻辑关系。

  2. 对于有父子关系的两张表而言,子表中需要有外键约束的定义;

例如:

父表 - 部门表

  1. CREATE TABLE t_dept(
  2. deptno INT UNSIGNED PRIMARY KEY,
  3. dname VARCHAR(20) NOT NULL UNIQUE,
  4. tel CHAR(4)
  5. );

子表 - 员工表

外键约束的定义是写在子表上的

  1. CREATE TABLE t_emp(
  2. empno INT UNSIGNED PRIMARY KEY,
  3. ename VARCHAR(20) NOT NULL,
  4. sex ENUM("男","女") NOT NULL,
  5. deptno INT UNSIGNED NOT NULL,
  6. hiredate DATE NOT NULL,
  7. FOREIGN KEY (deptno) REFERENCES t_dept(deptno) 
  8. # FOREIGN KEY + 外键字段的名称 + REFERENCES + 父表(父表中进行关联的字段)
  9. );

注意:
使用外键约束可能会造成的闭环问题,即如果多张表如果形成了外键闭环的话,我们将无法删除任何一张表的记录。