报错截图
如果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