0
我已经创建了两个简单的表来解释这个问题。删除MySQL中的父表
CREATE TABLE `child` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`father_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_22B354292055B9A2` (`father_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
CREATE TABLE `father` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
ALTER TABLE `child`
ADD CONSTRAINT `child_ibfk_1` FOREIGN KEY (`father_id`) REFERENCES `father` (`id`)
ON DELETE CASCADE;
想象一下,子表中有通过外键链接到父表的行。
如果我在父表中删除了一行中有行链接的行,我可以删除它,因为我已经激活了“ON DELETE CASCADE”。
的问题是,如果我尝试删除父表,即使没有行既不是父亲表中,也不在子表上,我收到以下错误信息(在phpMyAdmin):
#1217 - Cannot delete or update a parent row: a foreign key constraint fails
我试过这个命令:
SET foreign_key_checks = 0;
,但仍然出现相同的错误消息。
我可以删除整个数据库并重新创建它,但我不想这样做,如果有另一个解决方案(如ON DELETE CASCADE的行)。
有什么建议吗?
我想知道如何只用'DROP TABLE命令father'之所以这样做,是因为我想使用Symfony2的这个命令: 'PHP应用程序/控制台学说:灯具:load' 哪在加载数据之前首先刷新数据库。但是,由于相同的原因,它给了我与phpmyadmin相同的错误(唯一的区别是Symfony2命令使用截断表)。我当然可以将外键放在子表中,但我想知道是否有自动执行的替代解决方案,例如行的ON DELETE CASCADE解决方案。 – rfc1484 2011-06-14 18:18:48
我不相信有这样的功能,至少不是我碰到过的。删除行是对数据的更改,而删除表则是对模式的更改。 – Jason 2011-06-14 18:21:49