当前位置: 首页 > 科技观察

delete、truncate、drop的区别有哪些,该如何选择

时间:2023-03-15 16:01:09 科技观察

删除、截断和删除之间有什么区别?我该如何选择?,磁盘不仅没有变小,反而变满了???”那你是怎么删除的呢?“deletefromtable”“难怪,其实删除mysql数据的方法有好几种。在某些情况下,不应该使用DELETE,比如你的情况。好吧,让我告诉你。《MySQL删除数据的方式有哪些?我们常用的三种删除方式:通过delete、truncate、drop关键字进行删除;这三种都可以用来删除数据,但是使用的场景不同。1.执行速度上,drop>truncate>>DELETE2.原则上1.DELETEDELETEfromTABLE_NAMEwherexxx1.DELETE属于数据库DML操作语言,只删除数据,不删除表的结构,在InnoDB中,DELETE实际上并没有删除数据,mysql其实只是将被删除的数据标记为已删除。因此,delete删除表中的数据时,表文件在磁盘上占用的空间并不大。会变小,存储空间不会被释放,但是被删除的数据行会被设置为不可见,虽然磁盘空间没有释放,但下次插入数据时仍然可以重新使用(reuse→overwrite)3.执行DELETE时,删除的数据会先缓存到回滚段,并且这将需要ef事务提交后生效;4.deletefromtable_name删除表中的所有数据。对于MyISAM,磁盘空间会立即释放,InnoDB不会释放磁盘空间;5..对于deletefromtable_namewherexxx条件删除,InnoDB和MyISAM都不会释放磁盘空间;6.删除操作后使用optimizetabletable_name会立即释放磁盘空间。InnoDB或MyISAM。因此,为了达到释放磁盘空间的目的,在delete之后进行optimizetable操作。历届面试题总结:001~150总结例:查看表占用硬盘空间的SQL语句如下:(以M为显示单位,数据库名:csjdemo,表名:demo2)selectconcat(round(sum(DATA_LENGTH/1024/1024),2),'M')astable_sizefrominformation_schema.tableswheretable_schema='csjdemo'ANDtable_name='demo2';然后执行空间优化语句,执行后表Size发生变化:optimizetabledemo2再看这张表的大小,只剩下表结构大小了。7、逐行执行删除操作,同时在redo和undo表空间中记录该行的删除操作日志,用于回滚和重做操作。产生的大量日志也会占用磁盘空间。面试题总结:001~150总结2.truncateTruncatetableTABLE_NAME1,truncate:属于数据库DDL定义语言,不走事务,不把原始数据放到回滚段,不触发操作的trigger.执行后立即生效,不可恢复。执行后立即生效。truncatetable其实有点类似于droptable然后creat,但是对建表的过程进行了优化,比如表结构文件已经存在等等。所以速度应该接近droptable的速度;3.truncate可以快速清空一个表。并重置auto_increment的值。但是对于不同类型的存储引擎,需要注意:对于MyISAM,truncate会将auto_increment(自增序列)的值重置为1,delete后表仍然保持auto_increment。对于InnoDB,truncate会将auto_increment的值重置为1,delete后表仍然保持auto_increment。但是如果删除整张表后重启MySQL,重启后auto_increment会被设置为1。也就是说,InnoDB表本身是无法持久化auto_increment的。删除表后,auto_increment还在内存中,但重启后就丢失了,只能从1开始。本质上,重启后的auto_increment会从SELECT1+MAX(ai_col)FROMt开始。4.谨慎使用truncate,尤其是在没有备份的情况下。如果误删在线表,记得及时联系CAAC,预约电话:400-806-95533,dropDroptableTablename1,drop:属于数据库DDL定义语言,同Truncate;execute2.droptabletable_name立即释放磁盘空间,不管是InnoDB还是MyISAM;drop语句会删除表结构所依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但会变得无效。3.慎用滴剂。想要删表跑路的兄弟,请订票成功后再进行操作!预约电话:400-806-9553可以理解为一本书,delete就是撕目录,truncate就是撕掉书的内容烧掉,drop就是烧掉这本书