首页 » PHP教程 » phpdelete和truncate技巧_MYSQL笔记删除操作DeleteTruncateDrop用法比较

phpdelete和truncate技巧_MYSQL笔记删除操作DeleteTruncateDrop用法比较

访客 2024-11-03 0

扫一扫用手机浏览

文章目录 [+]

本日

drop>truncate>delete

2、事理方面2.1 delete

delete属于数据库DML操作措辞,只会删除数据表中的记录,会实行事务,实行的时候也会触发触发器。

phpdelete和truncate技巧_MYSQL笔记删除操作DeleteTruncateDrop用法比较

InnoDB数据库引擎中,实行delete操作只会给删除的记录打上了删除标记,并不会真正删除数据,只是把删除的数据记录设置为不可见,不会开释磁盘空间,如果插入新的数据可以覆盖该部分空间。

phpdelete和truncate技巧_MYSQL笔记删除操作DeleteTruncateDrop用法比较
(图片来自网络侵删)

如果开缘由务的话,实行delete操作,会先将要删除数据缓存到rollback segement中,等事务commit之后才生效。

delete from table_name 不带查询条件会删除表的全部数据,MyISAM引擎会急速开释磁盘空间,InnoDB 不会开释磁盘空间;如果带查询条件的话都不会开释磁盘空间,可以实行optimize table table_name 会急速开释磁盘空间。
建议如果须要开释存储空间的话可以实行delete后,然后实行optimize table table_name 语句达到清理磁盘空间的目的。

-- 查询数据库test对应的表t_user 占用的磁盘空间select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') as table_size from information_schema.tables where table_schema='test' AND table_name='t_user';

解释:delete 操作是逐行实行删除的,并且同时将每行的的删除操作日志记录在redo和undo表空间中去,便于进行回滚(rollback)和重做操作,因此天生的大量操作日志也会占用磁盘空间。

2.2 truncate

truncate是数据库DDL定义措辞,不受事务影响,也不会触发 trigger。
实行操作后会立即生效,无法找回删除的数据。

实行truncate table table_name 会急速开释磁盘空间 ,不管是 InnoDB和MyISAM 都一样 。

truncate可以退快速清空一个表。
并且重置auto_increment自动增长的值。
针对不同类型的数据存储引擎是有差异的,详细如下:

MyISAM:truncate会重置auto_increment(自增序列)的值为1。
而delete后表仍旧保持auto_increment。

InnoDB:truncate会重置auto_increment的值为1。
delete后表仍旧保持auto_increment。
但是在做delete全体表之后重启MySQL的话,则重启后的auto_increment会被置为1。

解释:InnoDB的表本身是无法持久保存auto_increment。
delete表之后auto_increment仍旧保存在内存,但是重启后就找不到了,只能从1开始。
实际上重启后的auto_increment会从 SELECT 1+MAX(ai_col) FROM t 开始。

利用truncate操作的时候要最好备份表,避免涌现不可挽回的情形。

2.3 drop

drop属于数据库DDL定义措辞,和truncate一样。
实行后会立即生效,不可规复。

drop table table_name 实行成功后不管是MyISM还是InnoDB都会急速开释磁盘空间 ,并且会删除该数据表上依赖的约束(constrain)、触发器(trigger)、索引(index); 依赖于该表的存储过程/函数将保留,但是会变为失落效状态。

总结

在事情当中实行数据库删除的时候一定要慎重再慎重,建议每次进行数据删除的利用最好数据表的备份事情,这样就会大大减少你删除跑路的几率。
很多时候不要过于相信自己的动手能力,老虎还有打盹的时候,万一手滑了呢。
尽可能养成好的数据库运维习气,这样会让自己少跌跟头,你的奇迹才会更加顺利。

MYSQL条记:删除操作Delete、Truncate、Drop用法比较

标签:

相关文章

换空间php空白技巧_PHP 命名空间namespace

PHP 命名空间可以办理以下两类问题:用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。为很长的标识...

PHP教程 2024-12-08 阅读0 评论0