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 类似,行为依赖于数据库实现

posted @ 2025-07-30 09:33  我的腹肌不见了  阅读(9)  评论(0)    收藏  举报