【问题标题】:What's the difference between delete from table_a and truncate table table_a in MySQL?MySQL 中从 table_a 中删除和截断表 table_a 有什么区别?
【发布时间】:2010-12-20 06:11:17
【问题描述】:

DELETE FROM table_aTRUNCATE TABLE table_a 在 MySQL 中有什么区别?

【问题讨论】:

  • 我想,兄弟们,OP 的意思是删除 without where 子句。就像完全清空表格的两种方式有什么区别。

标签: mysql


【解决方案1】:
  • 截断速度更快
  • 截断重置自动增量
  • 截断不是事务安全的 - 它会自动提交
  • 删除不必删除所有行

Truncate Documentation
Delete Documentation

【讨论】:

    【解决方案2】:

    Delete 允许您使用 WHERE 子句,以便仅删除某些行。截断将删除所有行并重置您可能拥有的任何 auto_increment 列。

    【讨论】:

      【解决方案3】:

      截断:

      • 通过解除分配表中的所有数据页来工作。
      • 将删除所有数据 - 您不能使用 WHERE 子句对其进行限制。
      • 不记录删除。
      • 触发器不会被触发。
      • 如果有任何外键引用该表,则不能使用。
      • 重置自动 ID 计数器。
      • 更快。

      删除:

      • 逐行删除。
      • 可以使用 WHERE 子句进行限制。
      • 删除记录在事务日志中(如果您明显登录),因此可以在必要时恢复删除(取决于您的日志记录设置)。
      • 触发器被触发。
      • 可用于具有外键的表(取决于您的键级联设置)。
      • 慢一点。

      【讨论】:

        【解决方案4】:

        Truncate 会重置 id 计数(如果它自动递增)

        【讨论】:

          【解决方案5】:

          不确定 MySQL(这就是我的答案是 wiki 的原因),但我可以告诉您至少一个其他 DBMS 的不同之处。 delete from 命令支持事务(允许回滚)和触发器,使其成为一种更慢的清除表的方式。另一方面,截断只是消除行而没有回滚的可能性,并且不对已删除的行运行任何触发器。

          【讨论】:

            【解决方案6】:

            如果没有外键,truncate table 会删除并重新创建表,这比删除单个行要快得多。

            截断还会重置所有自动递增计数器。

            当表被截断时,ON DELETE 触发器不会触发。

            更多信息可以在MySQL online documentation找到。

            【讨论】:

              【解决方案7】:

              使用 delete 删除的数据存储在临时表中,因此您可以使用 delete 命令使用事务,而 truncate 命令直接删除数据,因此您无法使用事务(回滚)恢复。 这就是截断比删除快的原因。 Delete 允许使用 where 子句,而 Truncate 则不允许。

              【讨论】:

                【解决方案8】:

                删除:
                删除mysql分配的行和空间
                数据可以再次回滚
                可以和WHERE子句一起使用
                截断:
                类似删除。但不同的是不能再次回滚数据,也不能使用 WHERE 子句。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-02-15
                  • 1970-01-01
                  • 2015-01-26
                  • 2010-09-13
                  • 2011-01-14
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多