我有 2 个表 users 和 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 join 更改语句,如下所示,
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 ON CASCADE
为了简单起见,我建议只使用两个查询:
DELETE FROM `users` WHERE `i_uid` = 1010;
DELETE FROM `pd` WHERE `i_uid` = 1010;