【问题标题】:Mysql: Which to use when: drop table, truncate table, delete from tableMysql:在以下情况下使用哪个:删除表,截断表,从表中删除
【发布时间】:2011-01-02 01:09:35
【问题描述】:

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

  • 删除表表名
  • 截断表表名;
  • tablename 中删除,其中 1;

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

【问题讨论】:

标签: sql mysql


【解决方案1】:
  • Drop 正在删除表。如果我不再需要它,我会放下桌子
  • “截断操作删除并重新创建表,这比逐行删除要快得多,尤其是对于大型表。” - 来自MySQL manual
  • 我会使用delete 对查询进行(特定行的)删除。

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

【讨论】:

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

    【讨论】:

    【解决方案3】:

    除了上面的答案,在 Oracle RDBMS 上,“删除”是一个事务,如果您没有提交,则可以回滚。 “截断”不能。

    【讨论】:

      【解决方案4】:

      删除

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

      截断:

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

      掉落

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

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

      在删除数据之前,请考虑数据是否有用。因为您无法再次获得该数据。

      【讨论】:

        【解决方案5】:

        删除

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

        截断

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

        掉落

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

        【讨论】:

          猜你喜欢
          • 2015-01-26
          • 1970-01-01
          • 1970-01-01
          • 2015-03-05
          • 1970-01-01
          • 2022-01-23
          • 2023-03-07
          • 1970-01-01
          • 2021-05-12
          相关资源
          最近更新 更多