で行を削除する私が定義は次のようであるMySQLのテーブルがあります。自己参照外部キー
CREATE TABLE `guestbook` ( `Id` int(10) unsigned NOT NULL, `ThreadId` int(10) unsigned NOT NULL, PRIMARY KEY (`Id`), KEY `ThreadId` (`ThreadId`), CONSTRAINT `guestbook_ibfk_1` FOREIGN KEY (`ThreadId`) REFERENCES `guestbook` (`Id`) ) ENGINE=InnoDB;
を、現在唯一の1行がテーブルにあります:
mysql> select * from guestbook; +-----+----------+ | Id | ThreadId | +-----+----------+ | 211 | 211 | +-----+----------+
問題制約を破ることなくこの行を削除する方法がないということです。
mysql> delete from guestBook; ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`polaris`.`guestbook`, CONSTRAINT `guestbook_ibfk_1` FOREIGN KEY (`ThreadId`) REFERENCES `guestbook` (`Id`))
ThreadId列がnullでないと定義されているため、ThreadIdを一時的に別の値に設定して行を削除することもできません。テーブルの定義を変更したり、テーブル全体を削除せずに行を削除する方法はありますか?
行自体が子行である行が奇妙です。 – Chandu
うわー、それはあなたが最後の行を削除するために制約をオフにする必要がある行を持っているテーブル構造を作成しました。あまりにもIDが22ではありませんでした。 –
@Conrad:ええ、これはいつも自己参照する外部キーで起こります。 :$ –