我有两个表,用户和禁令。用户表具有两列id
和type
。禁令表还具有两列userID
和bannedUserID
。我想删除ban
表中bannedUserID
的type
为“ 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语法。它应该与您的子查询方法完全相同,但是在某些情况下,它可以更加灵活。