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