use*_*410 5 mysql children parent sql-delete
我有1个MySQL表.它看起来像这样:
+---------+-------------+--------+
| item_id | parent_id | Name |
+---------+-------------+--------+
| 1 | 0 | Home |
+---------+-------------+--------+
| 2 | 1 | Sub |
+---------+-------------+--------+
| 3 | 2 | SubSub |
+---------+-------------+--------+
Run Code Online (Sandbox Code Playgroud)
如果我删除item_id 1,我想删除子的其余部分,但我该怎么办呢?
我已经尝试过外键但只有你有2个表才有效吗?
我希望有人可以帮助我在MySQL中使用PHP吗?
绝对可以使用MySQL自引用外键(您不需要多个表).但是,对于任何类型的外键支持,您都需要使用InnoDB引擎.我的猜测是,你正在使用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;
Run Code Online (Sandbox Code Playgroud)
然后,当您发出DELETE声明时,例如:
DELETE FROM `yourTable` WHERE `item_id` = 1;
Run Code Online (Sandbox Code Playgroud)
...这将删除每个"孩子"行,具有parent_id的1为好.如果这些"子"行中的任何一行都有自己的孩子,那么它们也会被删除,等等(这就是它的ON DELETE CASCADE意思).
| 归档时间: |
|
| 查看次数: |
3210 次 |
| 最近记录: |