我有两个表,用户和禁令。用户表具有两列idtype。禁令表还具有两列userIDbannedUserID。我想删除ban表中bannedUserIDtype为“ Admin”的记录。

我已经提出了这样的查询,但是我不确定它是否正确。

DELETE FROM ban WHERE ban.bannedUserID IN (SELECT id FROM user WHERE type = 'Admin')

这是对的吗?我是否需要添加/删除任何内容?

最佳答案

如果不确定DELETE是否正确,可以通过转换为等效的SELECT进行测试:

SELECT b.bannedUserID
FROM ban b JOIN user u ON b.bannedUserID = u.id
WHERE u.type = 'Admin';


该查询返回的ID是您要删除的ID吗?

然后在事务中尝试(如果您使用支持事务的存储引擎,即不支持MyISAM),则可以在必要时回滚:

START TRANSACTION;

DELETE b
FROM ban b JOIN user u ON b.bannedUserID = u.id
WHERE u.type = 'Admin';

/* do some SELECT to see if the correct rows have been deleted and no others */
/* but if anything appears wrong, and ban is an InnoDB table, you can... */

ROLLBACK;


请注意,我正在使用MySQL的多表DELETE语法。它应该与您的子查询方法完全相同,但是在某些情况下,它可以更加灵活。

10-08 14:37