mysql truncate快速删除表数据

mysql truncate快速删除表数据

时间:2013-10-12 10:10:36      作者:beebol      标签: CREATE TABLE DELETE DROP TRUNCATE      分类: Mysql

这里以mysql5.5说明,不同版本会有些不同,但不会有太大区别。

TRUNCATE TABLE就是清空数据表,它需要数据库的DROP权限。从逻辑上,它类似DELETE语句删除所有数据表数据。它是通过DROP TABLE和CREATE TABLE语句来实现高效清空数据,原因是它绕过了DML数据删除方法,所以就无法回滚,也无法导致ON DELETE触发器,在Innodb数据表中不能使用亲子外键关系。

TRUNCATE TABLE虽然是类似删除,它仍然被列为是一个DDL语句。它主要如下几点不同于DELETE语句:

1、TRUNCATE TABLE就是DROP表,然后重新CREATE表,所以比一行行删除要快得多,由其是非常大的表;

2、TRUNCATE TABLE的提交方式是无法回滚的;

3、TRUNCATE TABLE在Innodb表执行时,如果和其它表有外键约束,或引用表,就会执行失败。但同一个表内的列约束是可以的。

4、DELETE语句删除会返回影响数据行,但TRUNCATE TABLE不会返回任务信息;

5、只要一个表的表结构文件tbl_name.frm还是好的,利用TRUNCATE TABLE就可以重新创建表,尽管是数据文件和索引文件都坏了;

6、TRUNCATE TABLE数据表之后,AUTO_INCREMENT数据列会重新开始计数,一般DELETE不会。

7、当在分区表中使用TRUNCATE TABLE时,会DROP和重新CREATE数据文件及索引文件,但分区定义文件不受影响;

8、TRUNCATE TABLE不能触发ON DELETE触发器。

如下是操作实例:

mysql> select count(*) from billing_ldj;
+----------+
| count(*) |
+----------+
|     3251 | 
+----------+
1 row in set (0.00 sec)

mysql> truncate table billing_ldj;
ERROR 1105 (HY000): MyISAM table 'billing_ldj' is in use (most likely by a MERGE table). Try FLUSH TABLES.
mysql> flush tables;
Query OK, 0 rows affected (0.03 sec)

mysql> truncate table billing_ldj;
Query OK, 0 rows affected (0.06 sec)

mysql> select count(*) from billing_ldj;              
+----------+
| count(*) |
+----------+
|        0 | 
+----------+1 row in set (0.00 sec)
1 row in set (0.00 sec)

 

时间:2013-10-12 10:10:36      作者:beebol      标签: CREATE TABLE DELETE DROP TRUNCATE      分类: Mysql
  • 分享到:
  • 微博
  • QQ空间
  • 腾讯微博
  • 微信

Copyright © 2015 Gitblog | Proudly powered by Gitblog.