源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

MySQL清空数据表的方法实例与分析

  • 时间:2021-12-21 16:23 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:MySQL清空数据表的方法实例与分析
MySQL数据库中,如果我们想清空数据表(删除数据表中所有内容)的话,可以通过下面两个语句来实现:
truncate table table_n;

delete from table_n;
[b]实例[/b] 我们先通过实例看下通过这两种方式清空数据库的过程和结果
#delete演示
mysql> create table testforde(
 -> number int not null auto_increment,
 -> name varchar(20) not null,
 -> primary key(number)
 -> );
Query OK, 0 rows affected (0.05 sec)

#truncate演示
mysql> create table testfortr(
 -> number int not null auto_increment,
 -> name varchar(20) not null,
 -> primary key(number)
 -> );
Query OK, 0 rows affected (0.04 sec)
以上是两张同样结构的数据表,下面我们先插入数据,然后再分别用 [code]delete [/code]和 [code]truncate [/code]操作它们,看下结果如何
mysql> insert into testforde(name) values('zhagnsan'),('lisi'),('wanger'),('zhaoliu'),('xiaosan'),('qiqi'),('hanba');
Query OK, 7 rows affected (0.04 sec)
Records: 7 Duplicates: 0 Warnings: 0

mysql> insert into testfortr(name) values('zhagnsan'),('lisi'),('wanger'),('zhaoliu'),('xiaosan'),('qiqi'),('hanba');
Query OK, 7 rows affected (0.00 sec)
Records: 7 Duplicates: 0 Warnings: 0

mysql> select * from testforde;
+--------+----------+
| number | name  |
+--------+----------+
|  1 | zhagnsan |
|  2 | lisi  |
|  3 | wanger |
|  4 | zhaoliu |
|  5 | xiaosan |
|  6 | qiqi  |
|  7 | hanba |
+--------+----------+
7 rows in set (0.01 sec)

mysql> select * from testfortr;
+--------+----------+
| number | name  |
+--------+----------+
|  1 | zhagnsan |
|  2 | lisi  |
|  3 | wanger |
|  4 | zhaoliu |
|  5 | xiaosan |
|  6 | qiqi  |
|  7 | hanba |
+--------+----------+
7 rows in set (0.00 sec)

mysql> delete from testforde;
Query OK, 7 rows affected (0.02 sec)

mysql> truncate table testfortr;
Query OK, 0 rows affected (0.02 sec)

mysql> insert into testforde(name) values('zhagnsan'),('lisi'),('wanger'),('zhaoliu'),('xiaosan'),('qiqi'),('hanba');
Query OK, 7 rows affected (0.00 sec)
Records: 7 Duplicates: 0 Warnings: 0

mysql> insert into testfortr(name) values('zhagnsan'),('lisi'),('wanger'),('zhaoliu'),('xiaosan'),('qiqi'),('hanba');
Query OK, 7 rows affected (0.00 sec)
Records: 7 Duplicates: 0 Warnings: 0

mysql> select * from testforde;
+--------+----------+
| number | name  |
+--------+----------+
|  8 | zhagnsan |
|  9 | lisi  |
|  10 | wanger |
|  11 | zhaoliu |
|  12 | xiaosan |
|  13 | qiqi  |
|  14 | hanba |
+--------+----------+
7 rows in set (0.00 sec)

mysql> select * from testfortr;
+--------+----------+
| number | name  |
+--------+----------+
|  1 | zhagnsan |
|  2 | lisi  |
|  3 | wanger |
|  4 | zhaoliu |
|  5 | xiaosan |
|  6 | qiqi  |
|  7 | hanba |
+--------+----------+
7 rows in set (0.00 sec)
从上面操作过程和结果不难看出,它们最大的区别就是[code]delete[/code]在不限定[code]where[/code]条件下清空表的话,不会重置[code]auto_increment[/code]的值,新插入的会随着上次的值接着增加;而[code]truncate[/code]则不然,他会直接重置为1(其实这里它做的操作可以理解为直接删除表结构和内容,然后按照表结构重建表) [b]那么除了上面能明显看出来的区别之外,他们还存在以下几点区别:[/b]     1、[code]truncate[/code]是整个清空的,而delete是逐行删除的。相较而言,[code]truncate[/code]效率较高。     2、在事物处理方面,[code]truncate [/code]可能不会那么安全。因为 [code]delete [/code]语句是数据库操作语言(dml),这个操作会放到 [code]rollback segement[/code] 中,事务提交之后才生效;如果有相应的 [code]trigger[/code],执行的时候将被触发。而 [code]truncate [/code]是数据库定义语言(ddl),操作立即生效,原数据不放到 [code]rollback segment [/code]中,不能回滚,操作不触发 [code]trigger[/code]。     3、[code]truncate [/code]只能做清空表使用,而 [code]delete [/code]可以配合 [code]where[/code],[code]order by[/code],[code]limit [/code]等字句使用,所以在灵活方面,[code]delete[/code]完胜。     4、[code]truncate[/code]操作不会记录到日志中,而[code]delete[/code]则是记录的。     5、正是由于 [code]truncate [/code]操作不会记录到日志中,所以它不会激活触发器。所以对于由 [code]foreign [/code]约束引用的表,不能使用 [code]truncate table[/code],而应使用不带 [code]where [/code]子句的 [code]delete [/code]语句。     6、[code]truncate [/code]不能用于参与了索引视图的表 [b]总结[/b] 以上就是MySQL清空数据表的全部内容了,希望这篇文章的内容对大家的学习或者工作能有所帮助,如果有疑问大家可以留言交流。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部