MySQL清空表

打印 上一主题 下一主题

主题 609|帖子 609|积分 1827

当我们必要清空一个表中的所有行时,除了利用 DELETE * FROM table 还可以利用 TRUNCATE TABLE 语句。
如果想要清空一个表, TRUNCATE TABLE 语句比 DELETE语句更加有用。

TRUNCATE TABLE 语法

TRUNCATE TABLE 的语法很简朴,如下:
  1. 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 affected。DELETE 返回删除的行数。
  • 如果一个表被其他表的外键引用,对此表的 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 语句删除所有表中的所有行:
  1. DELETE FROM test;
复制代码
  1. Query OK, 100000 rows affected (1.01 sec)
复制代码
补充:用下面的语句插入一行数据。
  1. 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 快的多。
最后,我们用下面的语句插入一行数据:
  1. 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 会重置表的自增值。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表