[英]MySQL Delete rows from multiple tables
我有2个表用户,并且pd有一个公用列i_uid
为了从两个表中删除具有i_uid为1010的一行,我在php脚本中使用mysqli :: query发出了以下语句
DELETE
FROM `users`,`pd`
WHERE `users`.`i_uid`=`pd`.`i_uid` AND `users`.`i_uid` = 1010;
有什么问题吗?
由于您要从多个表格中删除行,因此唯一缺少的是指定要删除行的表格,
DELETE `users`,`pd`
FROM `users`, `pd`
WHERE `users`.`i_uid`=`pd`.`i_uid` AND `users`.`i_uid` = 1010;
在上面的查询中,它将从两个表中删除行。 我建议使用ANSI联接来更改语句,如下所示,
DELETE a, b
FROM users a
INNER JOIN pd b
ON a.i_uid = b.i_uid
WHERE a.i_uid = 1010
如果要从users
表中删除,
DELETE a
FROM users a
INNER JOIN pd b
ON a.i_uid = b.i_uid
WHERE a.i_uid = 1010
使用“ Left Join
并指定要在其上删除相应行的表。
DELETE users, pd
FROM users, pd
LEFT JOIN pd
ON pd.i_uid = users.i_uid
WHERE users.i_uid = 1010
其他答案是正确的,但由于没有人提及,我会这样做。 您可以使用InnoDB引擎并指定外键和DELETE ON CASCADE 。 这样,每次删除用户时,它都会从不同的表中删除所有引用行。
阅读有关外键的信息,并级联删除
为了简单起见,我建议仅使用两个查询:
DELETE FROM `users` WHERE `i_uid` = 1010;
DELETE FROM `pd` WHERE `i_uid` = 1010;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.