0

ツリー型の自己参照テーブルがあります。ルート要素 ID を使用してすべての子レコードを削除したい。そこで、カスケード削除で自己参照制約を追加しました。親がIDを参照する値を持っている場合に機能します。しかし、ルート要素にnullを入力したため、削除されていません。何か案が。ツリー ビューでルートを削除するときに、すべての子レコードを削除するにはどうすればよいですか。

テーブル クエリの作成

CREATE TABLE IF NOT EXISTS `_quiz` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `value` varchar(100) DEFAULT NULL,
  `type` varchar(20) NOT NULL,
  `parent` int(11) DEFAULT NULL,
  `created` datetime NOT NULL,
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `parent` (`parent`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


ALTER TABLE `_quiz`
  ADD CONSTRAINT `_quiz_ibfk_2` FOREIGN KEY (`parent`) REFERENCES `_quiz` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

データを含む私のテーブル

ここに画像の説明を入力 ここに画像の説明を入力

赤く強調表示されているのはルートです。すべての子を削除する必要があることを削除するとき。しかし、それは起こっていません!

他にそれをする人はいますか?

4

1 に答える 1

0

The first row is already breaking the constraint, as it doesn't have a parent. If a statement is breaking a constraint, the processing is being stopped immediately.

This is why there won't be any deletions, if you try to delete the first one. Even the first row itself won't be deleted.

Avoid the null in a referencing field. You could set it to reference to itself. I don't know if it could cause any other issues, but it would solve this one. ;)

于 2013-09-27T07:34:29.970 に答える