送你以下java学习资料,文末有获取方法。不但没有变小,反而变满了???”那怎么删除呢?“deletefromtable”“难怪,其实删除mysql数据有好几种方法。在某些情况下,不应该使用DELETE,比如你的情况。好吧,让我告诉你。《MySQL删除数据的方式有哪些?我们常用的三种删除方式:通过delete、truncate、drop关键字进行删除;这三种都可以用来删除数据,但是使用的场景不同。1.执行速度上,drop>truncate>>DELETE2.原则上1.DELETE`DELETEfromTABLE_NAMEwherexxx`1.DELETE属于数据库DML操作语言,只删除数据,不删除表的结构,会经过事务,执行时会触发触发器;2、在InnoDB中,DELETE并不会真正删除数据,mysql实际上只是将删除的数据标记为已删除,所以delete时删除的是表中的数据,表文件占用的空间磁盘上的空间不会减少,存储空间也不会被释放,但是被删除的数据行会被设置为不可见。虽然磁盘空间没有被释放,但下次插入数据时仍然可以重新使用这个空间(reuse→overwrite).3.执行DELETE时,删除的数据会先缓存在回滚段中,待事务提交后生效;4.deletefromtable\_name删除表中的所有数据。对于MyISAM,磁盘空间会立即释放,InnoDB不会释放磁盘空间;5.对于deletefromtable\_namewherexxx的条件删除,InnoDB和MyISAM都不会释放磁盘空间;6.删除操作后使用optimizetabletable\_name会立即释放磁盘空间。InnoDB或MyISAM。因此,为了达到释放磁盘空间的目的,在delete之后进行optimizetable操作。例:查看某表占用硬盘空间的SQL语句如下:(以M为显示单位,数据库名:csjdemo,表名:demo2)`selectconcat(round(sum(DATA_LENGTH/1024/1024),2),'M')astable_size``frominformation_schema.tables``wheretable_schema='csjdemo'ANDtable_name='demo2';`然后执行空间优化语句,执行后表Size发生变化:`optimizetabledemo2`看这个表的大小,只剩下表结构大小。7、逐行执行删除操作,同时在redo和undo表空间中记录该行的删除操作日志,用于回滚和重做操作。产生的大量日志也会占用磁盘空间。2.truncate`TruncatetableTABLE_NAME`1.truncate:属于数据库DDL定义语言,不执行事务,不将原始数据放入回滚段,不触发操作的触发器。执行后立即生效,不可检索执行后立即生效,不可检索执行后立即生效,不可检索2.truncatetabletable\_name立即释放磁盘空间,无论是InnoDB还是MyISAM。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,drop`DroptableTablename`1,drop:属于数据库DDL定义,语言同Truncate;执行后立即生效,不可恢复。执行后立即生效,不可恢复。被删除表的结构依赖于约束(constrain)、触发器(trigger)、索引(index);依赖于表的存储过程/函数将保留,但变得无效。3.慎用滴剂。如需删表跑路,请在订票成功后进行操作!预约电话:400-806-9553可以理解为一本书,delete就是撕目录,truncate就是撕掉书的内容烧掉,drop就是烧掉这本书
