0

MySQL 查询

 delete from t where not condition;

 create table s select * from t where condition;
 drop table t;

非常相似。(在这里,condition一个查询与另一个查询相同condition。)
第二种方法的一个优点是它允许您s在删除之前进行检查t,以确保您的查询没有出错。这是一个非常重要的考虑因素,我不希望将其最小化,但我想知道上述任何一个查询相对于另一个查询存在哪些其他优点和缺点。

4

2 回答 2

1

第一个要好得多,这就是为什么在 SQL 中存在删除命令的原因。无需重新发明删除命令:

1-当您想删除一些行时,无需更改架构(创建 s,删除 t)。

2- t 可能与您可能想要保留的其他表有关系。您甚至可能想要级联删除以删除其他一些表中的一些其他相关行,使用删除触发器和......

3- 至于在删除之前检查您提到的行的好处,您也可以在使用删除命令之前进行选择。

4-您的表可能具有指向其他应用程序逻辑的链接,例如 ORM 类、用于报告的 SP 等等。您是要在代码中创建一个新类还是每次要删除几行时更新现有的 SP ?

于 2013-03-06T18:10:39.873 回答
1

至于第二个查询,每当您在任何数据库中创建临时表时,都会对表空间进行碎片整理并降低数据库性能。我强烈建议不要采用第二种方法。

如果你真的想绝对确定你在做什么,你可以使用类似下面的代码:

/*
DELETE
-- */ SELECT *
FROM t
WHERE condition;

当您确定返回的行正是您要删除的行时,您可以轻松地注释第一行的注释开头,例如:

-- /*
DELETE
-- */ SELECT *
FROM t
WHERE condition;

DELETE在运行任何语句之前,我使用相同的方法。

于 2013-03-06T18:09:37.960 回答