sql:
delete d,m,z from tab_lightrate_day d , tab_lightrate_month m ,tab_zone z where d.zoneId = z.id and z.id = m.zoneId and z.id =101
出现如下提示:
Cannot delete or update a parent row: a foreign key constraint fails (`db_lms`.`tab_lightrate_day`, CONSTRAINT `tab_lightrate_day_ibfk_1` FOREIGN KEY (`zoneId`) REFERENCES `tab_zone` (`id`))//外键约束,删不掉
于是乎就网上到处搜索资料:
浏览了大片资料后,最后在百度文库中找到了灵感。操作:
1、首先用 show create table 表名 查到了 操作的三张表的建表语句:
A、tab_zone
CREATE TABLE `tab_zone` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `description` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=110 DEFAULT CHARSET=gb2312
B、tab_lightrate_day
CREATE TABLE `tab_lightrate_day` ( `id` int(10) NOT NULL AUTO_INCREMENT, `zoneId` int(5) NOT NULL, `sampleTime` datetime NOT NULL, PRIMARY KEY (`id`), KEY `zoneId` (`zoneId`) USING BTREE, CONSTRAINT `tab_lightrate_day_ibfk_1` FOREIGN KEY (`zoneId`) REFERENCES `tab_zone` (`id`)//定义了外键约束,但是没有定义级联删除 ) ENGINE=InnoDB AUTO_INCREMENT=1009 DEFAULT CHARSET=utf8
C、tab_lightrate_month
CREATE TABLE `tab_lightrate_month` ( `id` int(10) NOT NULL AUTO_INCREMENT, `zoneId` int(5) NOT NULL, `month` varchar(10) NOT NULL, `lightRate` decimal(4,1) NOT NULL, PRIMARY KEY (`id`), KEY `zoneId` (`zoneId`) USING BTREE, CONSTRAINT `tab_lightrate_month_ibfk_1` FOREIGN KEY (`zoneId`) REFERENCES `tab_zone` (`id`)//同样也定义了外键约束,但是没有 级联删除定义 ) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8
通过以上三张表的建表语句看出,从表tab_lightrate_month,tab_lightrate_day 都定义了外键约束,单灯没有定义级联删除。所以当我再操作时 就出现本文开始的提示信息。
下一步就是解决办法了,从百度文库中找到了解决办法:
1、首先删除tab_lightrate_day 之前的外键约束:
alter table tab_lightrate_day drop foreign key tab_lightrate_day_ibfk_1
2、然后重新添加新的外键约束(增加了级联删除)
alter table tab_lightrate_day add foreign key(zoneId) REFERENCES `tab_zone` (`id`) on delete cascade
3、对表tab_lightrate_month 也做同样的操作
alter table tab_lightrate_month drop foreign key tab_lightrate_month_ibfk_1 alter table tab_lightrate_month add foreign key(zoneId) REFERENCES `tab_zone` (`id`) on delete cascade
4、最后测试:
delete from tab_zone where id=101
级联删除成功!!
本文出自 “学习交流小屋” 博客,转载请与作者联系!