Mysql:使用哪个:drop table,truncate table,delete from table

时间:2010-01-06 12:52:39

标签: sql mysql

列出以下MySql命令之间的差异。

  • drop table tablename ;
  • 截断表 tablename ;
  • tablename 中删除其中1;

另外根据您的经验,请告诉我每个人的典型使用方案。

5 个答案:

答案 0 :(得分:26)

  • drop table tablename;
    • 在此之后,消失了。没有更多的表格。没有更多数据。
    • 当您不再需要该表时使用此功能。
  • truncate table tablename;
    • 在此之后,表格为空,并且(重要的是)自动递增键被重置为1.这就像拥有一张全新的桌子一样。
    • 当您只想要一张空桌时使用它。它比DELETE快,因为它只删除所有数据。 DELETE将扫描表格以生成受影响的行数。
  • delete from tablename;
    • 这使您可以根据可选的WHERE子句过滤要删除的行。
    • 如果要删除特定记录,请使用此选项,例如:DELETE FROM tablename WHERE username = 'joe'

答案 1 :(得分:4)

删除

  • 仅删除行
  • Mysql保持其定义
  • 你有机会回滚

截断:

  • 与删除相同,但您可以再次回滚数据

掉落

  • 从mysql数据库中删除表数据和数据结构
  • 无法再次滚动

如果您只想删除行,则可以使用 DELETE
如果要从数据库中删除表,则可以使用 DROP

在删除数据之前,请充分考虑数据是否有用。因为你无法再获得那些数据。

答案 2 :(得分:3)

  • Drop正在删除该表格。如果我不再需要它,我会放弃桌子
  • “截断操作会丢弃并重新创建表,这比逐个删除行要快得多,特别是对于大型表。” - 来自MySQL manual
  • 我会使用delete使用查询删除(特定行)。

我很少“删除”我的数据库中的任何内容。我通常将一个标志列(例如deleted)作为布尔值。我检查一下。如果是true,我不会提供该数据。

答案 3 :(得分:2)

除了上面的答案之外,在Oracle RDBMS上,“删除”是一个可以在未提交时回滚的事务。 “截断”不能。

答案 4 :(得分:2)

删除

  • DELETE语句删除表行并返回已删除的行数

<强>截断

  • TRUNCATE删除表并重新创建它。它比逐个删除行快得多。
  • TRUNCATE从表中删除所有行。
  • TRUNCATE不返回已删除的行数。

下拉

  • 删除数据和结构。
  • DROP和DELETE表之间的区别在于,在执行DELETE语句后,表的内容被删除但结构保持不变,但是在DROP语句的情况下,内容和结构都被删除。