MySQL中删除USER/PRODUCT行时如何级联删除RELATIONS关联行?
MySQL级联删除关联表数据的实现方案
首先纠正你的误解:RELATIONS表完全可以使用外键约束,外键只要求引用的父表列是主键(或唯一键),子表的关联列允许重复值——这正是用户-产品关联表的典型场景。
你需要给RELATIONS表的两个字段分别添加外键约束,并配置ON DELETE CASCADE规则,就能实现删除父表(USER/PRODUCT)行时,自动级联删除RELATIONS表中的关联记录。
一、创建表时直接配置外键与级联删除
如果是新建表,可在创建RELATIONS表时直接定义外键:
-- 创建USER表(USER是MySQL保留关键字,需用反引号包裹) CREATE TABLE `USER` ( ID INT PRIMARY KEY, NAME VARCHAR(50) ); -- 创建PRODUCT表 CREATE TABLE PRODUCT ( ID INT PRIMARY KEY, NAME VARCHAR(50) ); -- 创建RELATIONS表,同时配置级联删除的外键 CREATE TABLE RELATIONS ( USER INT, PRODUCT INT, -- 关联USER表,删除用户时级联删除关联记录 FOREIGN KEY (USER) REFERENCES `USER`(ID) ON DELETE CASCADE, -- 关联PRODUCT表,删除产品时级联删除关联记录 FOREIGN KEY (PRODUCT) REFERENCES PRODUCT(ID) ON DELETE CASCADE );
二、给已存在的表添加外键约束
如果表已经存在,需先确保RELATIONS表中没有无效关联数据(比如USER字段的值不在USER表中),再执行以下语句添加外键:
-- 给USER字段添加外键与级联删除 ALTER TABLE RELATIONS ADD CONSTRAINT fk_relations_user FOREIGN KEY (USER) REFERENCES `USER`(ID) ON DELETE CASCADE; -- 给PRODUCT字段添加外键与级联删除 ALTER TABLE RELATIONS ADD CONSTRAINT fk_relations_product FOREIGN KEY (PRODUCT) REFERENCES PRODUCT(ID) ON DELETE CASCADE;
效果验证
- 删除USER表中ID=1的行,RELATIONS表中所有
USER=1的记录会被自动删除; - 删除PRODUCT表中ID=1的行,RELATIONS表中所有
PRODUCT=1的记录会被自动删除。
注意事项
USER是MySQL保留关键字,操作该表时必须用反引号(`)包裹,避免语法错误;- 父表的ID字段必须是主键或唯一键,否则无法创建外键约束;
- 添加外键前需清理RELATIONS表中的无效数据,否则约束创建会失败。
内容的提问来源于stack exchange,提问作者menigonzalez_
相关产品推荐
相关产品推荐

