Php 2个表删除了什么?
我在mysql中有两个表 当某些东西被插入表1时,它也被插入表2中。这样,两个表的id列中的自动增量总是对齐 然后我从表1中删除了许多符合特定条件的行,但没有从表2中删除任何行。现在我想从表2中删除我从表1中删除的所有行 所以基本上,我想从表2中删除表1中id不存在的所有行…并保留表1和表2中id列存在的行 我怎样才能做到尽可能干净和简单Php 2个表删除了什么?,php,mysql,Php,Mysql,我在mysql中有两个表 当某些东西被插入表1时,它也被插入表2中。这样,两个表的id列中的自动增量总是对齐 然后我从表1中删除了许多符合特定条件的行,但没有从表2中删除任何行。现在我想从表2中删除我从表1中删除的所有行 所以基本上,我想从表2中删除表1中id不存在的所有行…并保留表1和表2中id列存在的行 我怎样才能做到尽可能干净和简单 我可以使用php或mysql/phpmyadmin…如果这两个表相关,那么最好使用级联删除 否则 Delete FROM table2 WHERE ID no
我可以使用php或mysql/phpmyadmin…如果这两个表相关,那么最好使用级联删除 否则
Delete
FROM table2
WHERE ID not in (select t1.ID from table1 t1);
您可以使用联接进行删除,但首先要进行备份
DELETE table2 FROM table2 LEFT JOIN table1
ON table2.id=table1.id
WHERE table1.id IS NULL;
以下是最紧凑的解决方案:
delete table2 from table2 left join table1
using (id)
where table1.id is null
编辑:不仅仅是紧凑。紧凑高效。子查询解决方案将像饥饿的老虎一样消耗您的CPU时间。要同时从两个表中删除记录,请执行以下操作:
DELETE `table1`, `table2`
FROM `table1`
LEFT OUTER JOIN `table2` ON `table1`.`id` = `table2`.`id`
WHERE @condition
这样,您就不需要向数据库发送每个表的查询
当某些东西被插入表1时,它也被插入表2中。这样,两个表的id列中的自动增量总是对齐
请不要那样做。自动增量不是用来保持值同步的东西。您应该执行以下操作:
在表1中插入数据,自动递增;
获取最后插入行的Id;
在表2中插入数据,不自动递增,id=table1.id
我强烈建议你尽快重构,否则你将来会有成千上万的类似问题
将此作为答案发布,因为具有相同OP问题的任何人都可能是相同架构错误的受害者。在table2.id=table1.id上,也可以使用id编写。
$result = mysql_query(SELECT ID FROM table2 WHERE table2.ID NOT IN ( SELECT table1.ID FROM table1 WHERE table2.ID=table1.ID ));
$rows = mysql_num_rows($result);
$i = 0;
while($i < $rows){
$cleanup = mysql_query(DELETE from table2 WHERE ID='$result[$i] ));
}