使用删除与复制数据和使用drop的优点和缺点

时间:2013-03-06 17:49:15

标签: mysql select delete-row mysql-5.5 drop-table

MySQL查询

 delete from t where not condition;

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

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

2 个答案:

答案 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每次你想删除几行?