MySQL--二(删除)

warning: 这篇文章距离上次修改已过632天,其中的内容可能已经有所变动。

MySQL通常通过 delete、truncate、drop 关键字进行删除;这三种都可以用来删除数据,但场景不同。

一、从执行速度上来说

drop>truncate>delete

二、从原理上讲

1、delete

        delete属于数据库DML操作语言,只删除数据不删除表的结构;

        在InnoDB中,delete其实不会真的把数据删除,mysql实际上只是给删除的数据打上了一个不可视的标签,标记为已删除,因此delete删除数据时,表文件在磁盘上所占空间大小不会变,存储空间不会释放。虽然未释放磁盘空间,但下次插入数据时仍然可以重用这一部分(重用  -->  覆盖);

        delete执行时,会先将删除数据缓存到rollback segement中,事务提交后生效;

        delete from table_name删除表的全部数据,对于MYISAM会释放磁盘空间,InnoDB不会释放磁盘空间;

        对于delete from table_name where ...带条件的删除,MYISAM和InnoDB都不会释放磁盘空间;

        delete操作后使用optimize table table_name(空间优化)会立刻释放磁盘空间,无论是MYISAM还是InnoDB;

        delete操作是一行一行执行删除的,且同时将该行的操作日志记录在表空间中方便回滚和重做操作,生成的大量日志会占用磁盘空间。

2、truncate

       truncate属于数据库DDL定义语言,不走事务;

        truncate from table table_name立刻释放磁盘空间,无论是MYISAM还是InnoDB。truncate table类似于drop table然后create;

        truncate能够快速清空一个表,并且重置auto_increme(自增索引)的值;

3、drop

       drop属于数据库DDL定义语言,同truncate;

        drop table table_name立刻释放磁盘空间;

可以这么理解,一本书,delete是把目录撕了,truncate是把书的内容撕下来烧了,drop是把书烧了!!!
最后修改于:2023年03月31日 16:30

添加新评论