5

MySQLテーブルが1つあります。次のようになります。

+---------+-------------+--------+
| item_id |  parent_id  |  Name  |
+---------+-------------+--------+
|   1     |     0       |  Home  |
+---------+-------------+--------+
|   2     |     1       |  Sub   |
+---------+-------------+--------+
|   3     |     2       | SubSub |
+---------+-------------+--------+

item_id 1 を削除すると、残りのサブも削除したいのですが、どうすればよいですか?

外部キーを試しましたが、2 つのテーブルがある場合にのみ機能しますか??

誰かがMySQL、おそらくPHPで私を助けてくれることを願っていますか?

4

2 に答える 2

5

最も間違いなく、MySQL で自己参照外部キーを使用できます (複数のテーブルは必要ありません)。InnoDBただし、あらゆる種類の外部キーのサポートについては、 engineを使用する必要があります。私の推測では、MyISAMエンジンを使用していると思います。

次のようにInnoDB、自己参照外部キーを含む、既にあるものと同様のテーブルを作成できます。

CREATE TABLE  `yourTable` (
  `item_id` int(10) unsigned NOT NULL auto_increment,
  `parent_id` int(10) unsigned default NULL,
  `Name` varchar(50) NOT NULL,
  PRIMARY KEY  (`item_id`),
  KEY `FK_parent_id` (`parent_id`),
  CONSTRAINT `FK_parent_id` FOREIGN KEY (`parent_id`) REFERENCES `yourTable` (`item_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

次に、DELETEステートメントを発行すると、次のようになります。

DELETE FROM `yourTable` WHERE `item_id` = 1;

...各「子」行も削除されます。これにはparent_idof1も含まれます。これらの「子」行のいずれかに独自の子がある場合、それらも削除されます(これがON DELETE CASCADE意味することです)。

于 2013-04-01T16:43:21.680 に答える
0

実際には思ったより簡単です:

DELETE FROM table WHERE id = # OR parent_id = #; //where # is the same in both places.

例:

DELETE FROM table WHERE id = 1 OR parent_id = 1;
于 2013-04-01T16:55:53.193 に答える