解决报错Cannot delete or update a parent row: a foreign key constraint fails

报错截图
在这里插入图片描述
如果A表是主表(tbdept),B表是从表(tbemploy),在删除tbdept表中的数据时,如果tbemploy表有引用要删除的数据就会报这个错误,删除失败。

解决

  • 可手动判断要删除的这个数据的值在子表中有没有记录,有的话就不执行删除操作

  • 先删除子表引用的数据,再删除主表的数据

  • 删除主表与子表的外键关系

show create table tbemploy
CREATE TABLE `tbemploy` (
  `SGUID` varchar(36) NOT NULL,
  `BADMINFLAG` int(11) NOT NULL,
  `BFLAGAPPLOGIN` bit(1) DEFAULT NULL,
  `BFLAGONLINE` bit(1) DEFAULT NULL,
  `BFLAGPOST` bit(1) DEFAULT NULL,
  `BFLAGROLE` bit(1) DEFAULT NULL,
  `BLEAD` bit(1) DEFAULT NULL,
  `BPUBLICUSER` bit(1) DEFAULT NULL,
  `BUSE` bit(1) DEFAULT NULL,
  `BWEIXINQYH` bit(1) DEFAULT NULL,
  `DGPSDATE` datetime DEFAULT NULL,
  `ISORT` int(11) DEFAULT NULL,
  `SCHATTOKEN` varchar(200) DEFAULT NULL,
  `SEMPLOYTYPE` varchar(200) DEFAULT NULL,
  `SGDGPS` varchar(200) DEFAULT NULL,
  `SGPS` varchar(200) DEFAULT NULL,
  `SIMG` varchar(4000) DEFAULT NULL,
  `SIPADDRESS` varchar(255) DEFAULT NULL,
  `SLOGINNAME` varchar(50) DEFAULT NULL,
  `SMESSAGE` varchar(1020) DEFAULT NULL,
  `SPASSWORD` varchar(50) DEFAULT NULL,
  `SPHONE` varchar(20) DEFAULT NULL,
  `SPINYIN` varchar(200) DEFAULT NULL,
  `STOKENNUM` varchar(50) DEFAULT NULL,
  `SUSERNAME` varchar(200) DEFAULT NULL,
  `SWEIXIN` varchar(200) DEFAULT NULL,
  `TLOGINTIME` datetime DEFAULT NULL,
  `SGUIDDEPT` varchar(36) DEFAULT NULL,
  `SGUIDPARTTIMEDEPT` varchar(500) DEFAULT NULL,
  `SNAMEPARTTIMEDEPT` varchar(500) DEFAULT NULL,
  `SWEIXINID` varchar(200) DEFAULT NULL,
  `PORTALFLAG` bit(1) DEFAULT NULL,
  `BINNER` bit(1) DEFAULT NULL,
  `sclientId` varchar(255) DEFAULT NULL,
  `BWEIXINPREVIEW` bit(1) DEFAULT NULL,
  PRIMARY KEY (`SGUID`),
  KEY `FKbh9cxwp7g0fyi3wd9uwdv4gq2` (`SGUIDDEPT`),
  CONSTRAINT `tbemploy_ibfk_1` FOREIGN KEY (`SGUIDDEPT`) REFERENCES `tbdept` (`SGUID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

可以看到确实有这个外键

 CONSTRAINT `tbemploy_ibfk_1` FOREIGN KEY (`SGUIDDEPT`) REFERENCES `tbdept` (`SGUID`)

将这个外键关系删除

alter table tbemploy DROP foreign key tbemploy_ibfk_1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值