实现Client表记录删除时自动删除PartyEvent关联行及外键删除报错咨询
报错原因
- 外键约束名不匹配:你在创建PARTY_EVENT表时,给两个外键约束自定义的名称分别是
PARTY_EVENT_FK(关联CLIENT表)、PARTY_EVENT_FK1(关联CHEF表),删除语句里指定的FK_passport_number并不是你实际创建的约束名称,因此触发1091错误。 - 额外提醒:你当前的表设计存在逻辑缺陷,同一个
passport_number字段同时关联CLIENT、CHEF两张表,除非CLIENT和CHEF表的passport_number取值完全没有重叠,否则插入数据时会触发外键校验失败。
修复方案
首先确认你要删除的外键对应的目标表,执行对应语句即可:
- 如果要删除关联CLIENT表的外键(MySQL环境语法):
ALTER TABLE PARTY_EVENT DROP FOREIGN KEY PARTY_EVENT_FK;
如果是SQL Server、PostgreSQL环境,把DROP FOREIGN KEY改成DROP CONSTRAINT即可。
- 如果要删除关联CHEF表的外键(MySQL环境语法):
ALTER TABLE PARTY_EVENT DROP FOREIGN KEY PARTY_EVENT_FK1;
另外补充:你原本的需求是删除CLIENT表记录时自动删除关联的PARTY_EVENT记录,你现有建表语句里的PARTY_EVENT_FK已经配置了ON DELETE CASCADE,本身已经满足需求,不需要额外删除外键。
内容的提问来源于stack exchange,提问作者Jasper Ng
相关产品推荐
相关产品推荐

