You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:35:22