Mysql:何时使用drop table、truncate table和delete from table?

16

列出以下 MySql 命令之间的区别。

  • drop table tablename;
  • truncate table tablename;
  • delete from tablename where 1;

请根据您的经验,告诉我每个命令的典型用法场景。


上一个查询是删除所有行。我用“where 1”子句明确表示了它。 - gameover
5个回答

28
  • drop table tablename;
    • 执行此操作后,该表将被彻底删除。没有表,没有数据。
    • 在您不再需要该表时使用。
  • truncate table tablename;
    • 执行此操作后,表将变为空,并且(重要的是)自增键值将重置为1。这就像拥有一个全新的表一样。
    • 当您只想要一个空表时使用它。与DELETE相比,它更快,因为它仅删除所有数据。DELETE将扫描表以生成受影响行数的计数。
  • delete from tablename;
    • 这使您可以根据可选的WHERE子句筛选要删除的行。
    • 当您想要删除特定记录时,请使用此操作,例如:DELETE FROM tablename WHERE username = 'joe'

@Nathan指出的性能问题似乎已在MySQL 8.0中得到解决(请参见Nathan提供的此链接页面底部)。您还可以搜索8.0版本说明索引以获取有关“truncate table”的更多详细信息。 - blthayer

5
  • Drop是删除表的意思。如果我不再需要这个表,我会使用drop语句来删除它。
  • "Truncate操作删除并重新创建表格,相比逐行删除,特别是对于大表格而言,这种方式更快。" - 来自MySQL手册
  • 我会使用delete来执行带查询条件的删除(特定行)。

我很少从数据库中“删除”任何内容。通常我会添加一个标志列,例如deleted,作为布尔值。我检查该值。如果为true,我就不显示该数据。


5

删除

  • 仅删除行
  • MySQL会保留定义
  • 您有机会进行回滚

截断:

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

删除表

  • 从MySQL数据库中删除表的数据和结构
  • 无法再次回滚

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

在删除数据之前,请仔细考虑数据是否有用。因为您无法再次获取那些数据。


2
除了上面的答案之外,在Oracle RDBMS中,“delete”是可以回滚的事务,如果您没有提交,“truncate”则不行。

2

删除

  • DELETE语句用于删除表格行,并返回删除的行数。

截断

  • TRUNCATE表示删除并重新创建表。与逐行删除不同,它的速度更快。
  • TRUNCATE从表中删除所有行。
  • TRUNCATE不会返回已删除的行数。

删除

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接