您现在的位置: 365建站网 > 365文章 > mysql清空表中truncate与delete的用法和区别

mysql清空表中truncate与delete的用法和区别

文章来源:365jz.com     点击数:454    更新时间:2021-03-14 20:37   参与评论

mysql清空表中truncate与delete都是删除表的操作,但还是有些许不同。

delete和truncate区别如下:

一、灵活性:delete可以条件删除数据,而truncate只能删除表的所有数据;

delete * from table_name;

delete from table_test where ... 

truncate table table_test 

注 : truncate操作中的table可以省略,delete操作中的*可以省略

</>code

  1.  delete是一条一条删除记录的,配合事件(transaction)和回滚(rollback)可以找回数据,且自增(auto_increment)不会重置。
  2.  truncate则是直接删除整个表,再重新创建一个一模一样的新表,auto_increment会被重置,且数据无法找回。

二、效率:delete效率低于truncate,delete是一行一行地删除,truncate会重建表结构,

三、事务:truncate是DDL语句,需要drop权限,因此会隐式提交,不能够rollback;delete是DML语句,可以使用rollback回滚。

四、触发器:truncate 不能触发任何Delete触发器;而delete可以触发delete触发器。

</>code

  1. 1> truncate 是整体删除 (速度较快),delete是逐条删除 (速度较慢)
  2. 2> truncate 不写服务器 log,delete 写服务器 log,也就是 truncate 效率比 delete高的原因
  3. 3> truncate 不激活trigger (触发器),但是会重置Identity (标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录,而不是接着原来的 ID数。而 delete 删除以后,identity 依旧是接着被删除的最近的那一条记录ID加1后进行记录。如果只需删除表中的部分记录,只能使用 DELETE语句配合 where条件

</>code

  1. mysql> select * from students_bak;
  2. +-----+----------+--------+---------+
  3. | sid | sname    | gender | dept_id |
  4. +-----+----------+--------+---------+
  5. | 101 | zhangsan | male   |      10 |
  6. |   1 | aa       | 1      |       1 |
  7. +-----+----------+--------+---------+
  8. 2 rows in set (0.00 sec)
  9. mysql> truncate table students_bak;
  10. Query OK, 0 rows affected (0.16 sec)
  11. mysql> select * from students_bak;
  12. Empty set (0.00 sec)
  13. mysql> set autocommit=off;
  14. Query OK, 0 rows affected (0.01 sec)
  15. mysql> select * from students3;
  16. +-----+-------+--------+---------+--------+
  17. | sid | sname | gender | dept_id | sname2 |
  18. +-----+-------+--------+---------+--------+
  19. | 100 | NULL  | 1      |       1 | NULL   |
  20. +-----+-------+--------+---------+--------+
  21. 1 row in set (0.01 sec)
  22. mysql> truncate table students3;
  23. Query OK, 0 rows affected (0.06 sec)
  24. mysql> rollback;
  25. Query OK, 0 rows affected (0.00 sec)
  26. mysql> select * from students3;
  27. Empty set (0.00 sec)
  28. mysql> delete from students;
  29. Query OK, 5 rows affected (0.00 sec)
  30. mysql> select * from students;
  31. Empty set (0.00 sec)
  32. mysql> rollback;
  33. Query OK, 0 rows affected (0.07 sec)
  34. mysql> select * from students;
  35. +-----+-------+--------+---------+
  36. | sid | sname | gender | dept_id |
  37. +-----+-------+--------+---------+
  38. |   1 | aa    | 3      |       1 |
  39. |   4 | cc    | 3      |       1 |
  40. |   5 | dd    | 1      |       2 |
  41. |   6 | aac   | 1      |       1 |
  42. |  10 | a     | 1      |       1 |
  43. +-----+-------+--------+---------+
  44. 5 rows in set (0.00 sec)



如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (454人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号