当前位置:   article > 正文

MySQL清空表_truncate table语法

truncate table语法

当我们需要清空一个表中的所有行时,除了使用 DELETE * FROM table 还可以使用 TRUNCATE TABLE 语句

如果想要清空一个表, TRUNCATE TABLE 语句比 DELETE语句更加有效。

TRUNCATE TABLE 语法

TRUNCATE TABLE 的语法很简单,如下:

TRUNCATE [TABLE] table_name;

其中 TABLE 关键字是可选的。也就是说, TRUNCATE t; 和 TRUNCATE TABLE t; 是等效的。

TRUNCATE TABLE 语句相当于先将此表删除,再创建一个新表。TRUNCATE TABLE 语句需要对操作的表具有 DROP 权限。

TRUNCATE 与 DELETE 不同

虽然 TRUNCATE 与 DELETE 类似,但是他们在以下几个方面存在不同:

  • TRUNCATE 被归类为 DDL 语句,而 DELETE 被归类为 DML 语句。
  • TRUNCATE 操作无法被回滚,而 DELETE 可以被回滚。
  • TRUNCATE 操作删除和重建表,它的速度比 DELETE 快得多。
  • TRUNCATE 操作会重置表的自增值,而 DELETE 不会。
  • TRUNCATE 操作不会激活删除触发器,而 DELETE 会。
  • TRUNCATE 操作不返回代表删除行的数量的值,它通常返回 0 rows affectedDELETE 返回删除的行数。
  • 如果一个表被其他表的外键引用,对此表的 TRUNCATE 操作会失败。

TRUNCATE 实例

我们通过以下实例演示 TRUNCATE TABLE 的用法。

首先,我们使用下面的语句创建一个 test 表用于测试:

  1. CREATE TABLE test (
  2. id INT AUTO_INCREMENT PRIMARY KEY,
  3. v INT
  4. );

然后我们使用下面的 sql 语句插入10 万条数据:

  1. INSERT INTO test (v)
  2. SELECT (
  3. t4.i * 10000 + t3.i * 1000 + t2.i * 100 + t1.i * 10 + t0.i
  4. ) v
  5. FROM (
  6. SELECT 0 i
  7. UNION
  8. SELECT 1
  9. UNION
  10. SELECT 2
  11. UNION
  12. SELECT 3
  13. UNION
  14. SELECT 4
  15. UNION
  16. SELECT 5
  17. UNION
  18. SELECT 6
  19. UNION
  20. SELECT 7
  21. UNION
  22. SELECT 8
  23. UNION
  24. SELECT 9
  25. ) t0,
  26. (
  27. SELECT 0 i
  28. UNION
  29. SELECT 1
  30. UNION
  31. SELECT 2
  32. UNION
  33. SELECT 3
  34. UNION
  35. SELECT 4
  36. UNION
  37. SELECT 5
  38. UNION
  39. SELECT 6
  40. UNION
  41. SELECT 7
  42. UNION
  43. SELECT 8
  44. UNION
  45. SELECT 9
  46. ) t1,
  47. (
  48. SELECT 0 i
  49. UNION
  50. SELECT 1
  51. UNION
  52. SELECT 2
  53. UNION
  54. SELECT 3
  55. UNION
  56. SELECT 4
  57. UNION
  58. SELECT 5
  59. UNION
  60. SELECT 6
  61. UNION
  62. SELECT 7
  63. UNION
  64. SELECT 8
  65. UNION
  66. SELECT 9
  67. ) t2,
  68. (
  69. SELECT 0 i
  70. UNION
  71. SELECT 1
  72. UNION
  73. SELECT 2
  74. UNION
  75. SELECT 3
  76. UNION
  77. SELECT 4
  78. UNION
  79. SELECT 5
  80. UNION
  81. SELECT 6
  82. UNION
  83. SELECT 7
  84. UNION
  85. SELECT 8
  86. UNION
  87. SELECT 9
  88. ) t3,
  89. (
  90. SELECT 0 i
  91. UNION
  92. SELECT 1
  93. UNION
  94. SELECT 2
  95. UNION
  96. SELECT 3
  97. UNION
  98. SELECT 4
  99. UNION
  100. SELECT 5
  101. UNION
  102. SELECT 6
  103. UNION
  104. SELECT 7
  105. UNION
  106. SELECT 8
  107. UNION
  108. SELECT 9
  109. ) t4
  110. ORDER BY v;
  1. Query OK, 100000 rows affected (1.24 sec)
  2. Records: 100000 Duplicates: 0 Warnings: 0

通过以下 DELETE 语句删除所有表中的所有行:

DELETE FROM test;
Query OK, 100000 rows affected (1.01 sec)

补充:用下面的语句插入一行数据。

INSERT INTO test (v) values (1);

然后查看一下表中的数据:

  1. +--------+------+
  2. | id | v |
  3. +--------+------+
  4. | 131071 | 1 |
  5. +--------+------+
  6. 1 row in set (0.00 sec)

这是 TRUNCATE TABLE 语句的返回结果。它告诉我们总共耗费 0.02 秒。这里可以看出 TRUNCATE 比 DELETE 快的多。

最后,我们用下面的语句插入一行数据:

INSERT INTO test (v) values (1);

然后查看一下表中的数据:

  1. +----+------+
  2. | id | v |
  3. +----+------+
  4. | 1 | 1 |
  5. +----+------+
  6. 1 row in set (0.00 sec)

输出结果告诉我们,TRUNCATE 操作后,自增列 id 的值重置为 1。这与 DELETE 操作不同。

如果你需要在删除数据后仍然保持原有的自增值,请不要使用 TRUNCATE

结论

在本文中,我们介绍了在 MySQL 服务器上如何使用 TRUNCATE TABLE 语句清空表。本文的要点如下:

  • TRUNCATE TABLE 语句用于清空一个表。TABLE 关键字可以省略。
  • TRUNCATE TABLE 相当于删除并重建表,它不能回滚。
  • TRUNCATE TABLE 比 DELETE 速度快的多,尤其是对大数据表来说。
  • TRUNCATE TABLE 会重置表的自增值。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/409612
推荐阅读
相关标签
  

闽ICP备14008679号