约束分类:
NOT NULL 非空约束:字段必须有值
UNIQUE 唯一约束:值不能重复,但允许多个 NULL
PRINARY KEY 主键约束:既是 NOT NULL 又是 UNIQUE
DEFAULT 默认约束: 保存数据时.如果未指定该字段的值,则采用默认值
CHECK 检查约束:保证字段满足某一个值
FOREIGN KEY 外键约束:用来让两张表的数据之间建立连接,保证数据的一致性和完整性
外键完整语法:
建表时一起创建
CREATE TABLE 主表 ( id INT PRIMARY KEY, name VARCHAR(20) ); CREATE TABLE 从表 ( id INT PRIMARY KEY, pid INT, -- 外键级联动作写在 REFERENCES 后面 CONSTRAINT fk_从表_主表 -- 外键名自定义 FOREIGN KEY (pid) -- 从表列 REFERENCES 主表(id) -- 主表列 ON UPDATE CASCADE -- 主表更新,从表同步 ON DELETE SET NULL -- 主表删除,从表置空 );表已存在,事后追加:
ALTER TABLE 从表 ADD CONSTRAINT fk_从表_主表 FOREIGN KEY (pid) REFERENCES 主表(id) ON UPDATE CASCADE ON DELETE SET NULL;5 种级联动作对照表:
NO ACTION /RESTRICT:删除/更新 如果存在关联,则拒绝主表操作
CASCADE: 更新/删除 同步更新/同步删除
SET NULL:删除/更新 外键列设为 NULL(从表该列需允许 NULL)
SET DEFAULT:删除/更新 外键列设为默认值
-- 1. 主表:班级 CREATE TABLE t_class ( class_id INT PRIMARY KEY, cname VARCHAR(20) UNIQUE ); -- 2. 从表:学生 CREATE TABLE t_student ( stu_id INT PRIMARY KEY, sname VARCHAR(20) NOT NULL, class_id INT, age TINYINT CHECK (age BETWEEN 16 AND 30), -- 外键 CONSTRAINT fk_stu_class FOREIGN KEY (class_id) REFERENCES t_class(class_id) ON UPDATE CASCADE ON DELETE RESTRICT );