mysql外键
只有InnoDB支持外键
触发器
CREATE TRIGGER trigger_name
AFTER/BEFORE INSERT/UPDATE/DELETE ON table_name
FOR EACH ROW
BEGIN
-- 触发器操作的SQL语句
END;
外键
外键是子表中的列,其值必须引用父表的主键或唯一键。
-- 创建父表:客户
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(100)
);
-- 创建子表:订单,设置级联删除和更新
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
删除
从父表删除:
外键约束设置为ON DELETE CASCADE,那么当父表中的记录被删除时,所有引用该记录的子表中的相关记录也会被自动删除。这种情况下,你不需要手动删除子表中的记录。
上设置了ON DELETE CASCADE,那么当你删除一个部门时,该部门下的所有员工记录也会被自动删除。
外键约束设置为SET NULL或SET DEFAULT:如果外键约束设置为ON DELETE SET NULL或ON DELETE SET DEFAULT,那么当父表中的记录被删除时,子表中对应的外键列将被设置为NULL或默认值。这种情况下,你需要更新或检查子表中的相关记录。从子表删除:
直接删除即可,除非需要执行额外的数据库操作或维护。
级联操作
|
类型 |
说明 |
|
ON DELETE CASCADE |
删除父表记录时,自动删除子表中相关记录 |
|
ON UPDATE CASCADE |
更新父表主键时,自动更新子表中外键字段 |
|
ON DELETE SET NULL |
删除父表记录时,子表外键字段设为 NULL(字段必须允许为 NULL) |
|
ON DELETE RESTRICT |
如果子表中存在引用,禁止删除父表记录(默认行为) |
|
ON DELETE NO ACTION |
与 RESTRICT 类似,行为依赖于数据库实现 |
浙公网安备 33010602011771号