PHP MySQL删除父行和子行
发布时间:2020-12-13 17:23:45 所属栏目:PHP教程 来源:网络整理
导读:我有1个 MySQL表.它看起来像这样: +---------+-------------+--------+| item_id | parent_id | Name |+---------+-------------+--------+| 1 | 0 | Home |+---------+-------------+--------+| 2 | 1 | Sub |+---------+-------------+--------+| 3 | 2 |
我有1个
MySQL表.它看起来像这样:
+---------+-------------+--------+ | item_id | parent_id | Name | +---------+-------------+--------+ | 1 | 0 | Home | +---------+-------------+--------+ | 2 | 1 | Sub | +---------+-------------+--------+ | 3 | 2 | SubSub | +---------+-------------+--------+ 如果我删除item_id 1,我想删除子的其余部分,但我该怎么办呢? 我已经尝试过外键但只有你有2个表才有效吗? 我希望有人可以帮助我在MySQL中使用PHP吗? 解决方法
绝对可以使用MySQL自引用外键(您不需要多个表).但是,对于任何类型的外键支持,您需要使用
InnoDB engine.我的猜测是,您使用的是
MyISAM engine.
使用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; …它会删除每个’child’行,其parent_id也为1.如果这些’子’行中的任何一行都有自己的子项,它们也会被删除,等等(这就是ON DELETE CASCADE的含义). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |