MySQL查询
delete from t where not condition;
和
create table s select * from t where condition;
drop table t;
非常相似。 (此处,一个查询中的condition
与另一个查询中的condition
相同。)
第二种方法的一个优点是它允许您在删除s
之前检查t
,以确保您的查询没有出错。这是一个非常重要的考虑因素,我不希望将其最小化,但我想知道上述任何一个查询相对于另一个的其他优缺点是什么。
答案 0 :(得分:1)
对于第二个查询,无论何时在任何数据库中创建临时表,它都会对表空间进行碎片整理并降低数据库性能。我强烈建议不要采用第二种方法。
如果您真的想要完全确定自己在做什么,可以使用以下代码:
/*
DELETE
-- */ SELECT *
FROM t
WHERE condition;
当您确定返回的行完全是您要删除的行时,您可以轻松注释第一行的注释开头,如:
-- /*
DELETE
-- */ SELECT *
FROM t
WHERE condition;
在运行任何DELETE
语句之前,我使用相同的方法。
答案 1 :(得分:1)
第一个好得多,这就是SQL中存在删除'命令的原因。 无需重新发送删除命令:
1-如果要删除某些行,无需更改架构(创建s,删除t)。
2- t可能与您希望保留的其他表具有关系。您甚至可能希望级联删除以删除某些其他表中的某些其他依赖行,在删除时使用触发器...
3-至于在删除之前检查行的优点,你也可以在使用delete命令之前进行选择。
4-您的表可能有指向其他应用程序逻辑的链接,让我们说ORM类,SP用于报告和..您想在代码中创建新类还是更新现有SP每次你想删除几行?