所在的位置: mysql >> mysql市场 >> MySQL中deletetruncat

MySQL中deletetruncat

北京哪家医院皮肤科 http://pf.39.net/bdfyy/bjzkbdfyy/140802/4439528.html

上周同事小姐姐问我:“哈哥你看,我发现MySQL有bug,我下午为了清理磁盘,明明删除了万条MySQL数据,磁盘不仅没有变小,反而更满了呢??”那你是怎么删除的?“deletefromtable呀”“怪不得,其实要删除MySQL数据是有好几种方式的,有些场景下是不应该用DELETE的,比如你这种情况。好了,让我来给你讲一下吧。”

MySQL删除数据的方式都有哪些?

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

一、从执行速度上来说

droptruncateDELETE

二、从原理上讲

1、DELETE

DELETEfromTABLE_NAMEwherexxx1)DELETE属于数据库DML操作语言,只删除数据不删除表的结构,会走事务,执行时会触发trigger;

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

3)DELETE执行时,会先将所删除数据缓存到rollbacksegement中,事务


转载请注明:http://www.aierlanlan.com/rzdk/2676.html