请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

一起开发

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

mysql中truncate表名与delete from的区别分析

发表于 2012-12-2 18:22 作者:phper
php结合memcache实现访问统计文章点击的计数
随着访问量的增大,点击数直接更新数据库已经不太可能了,数据库中点击的更新 ...
Web开发利器,简版开发手册助您快速开发(图
web开发,帮助手册是我们经常查询的,查函数、查属性等等,下面图片里综合了各开发手册 ...
mysql中truncate表名与delete from的有以下4点区别,在开发中我们要掌握。

TRUNCATE在MySQL手册中的定义:
    TRUNCATE [TABLE] tbl_name
    TRUNCATE TABLE用于完全清空一个表。从逻辑上说,该语句与用于删除所有行的DELETE语句等同,但是在有些情况下,两者在使用上有所不同。
    对于InnoDB表,如果有需要引用表的外键限制,则TRUNCATE TABLE被映射到DELETE上;否则使用快速删减(取消和重新创建表)。使用TRUNCATE TABLE重新设置AUTO_INCREMENT计数器,设置时不考虑是否有外键限制。
    对于其它存储引擎,在MySQL 5.1中,TRUNCATE TABLE与DELETE FROM有以下几处不同:
    ·         删减操作会取消并重新创建表,这比一行一行的删除行要快很多。
    ·         删减操作不能保证对事务是安全的;在进行事务处理和表锁定的过程中尝试进行删减,会发生错误。
    ·         被删除的行的数目没有被返回。
    ·         只要表定义文件tbl_name.frm是合法的,则可以使用TRUNCATE TABLE把表重新创建为一个空表,即使数据或索引文件已经被破坏。
    ·         表管理程序不记得最后被使用的AUTO_INCREMENT值,但是会从头开始计数。即使对于MyISAM和InnoDB也是如此。MyISAM和InnoDB通常不再次使用序列值。
    ·         当被用于带分区的表时,TRUNCATE TABLE会保留分区;即,数据和索引文件被取消并重新创建,同时分区定义(.par)文件不受影响。
    TRUNCATE TABLE是在MySQL中采用的一个Oracle SQL扩展。

1、delete不能使自动编号返回为起始值。但是truncate能使自动增长的列的值返回为默认的种子。

2、truncate只能一次清空,不能按条件删除。但是delete可以按条件清除部分记录。

3、truncate清空数据表性能(速度)比delete快。

4、truncate不会记录到系统日志,不会触发delete触发器。

回复

使用道具 举报

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

Archiver|手机版|一起开发   

GMT+8, 2017-9-23 20:50 , Processed in 0.122630 second(s), 28 queries .

Powered by Discuz! X2.5 Licensed

© 2001-2012 Comsenz Inc.

回顶部