三种删除定义比较

id 自增------删除数据后恢复到删除前自增id
删除数据后,执行下面语句:

    ALTER TBALE TableName AUTO_INCREMENT=1

mysql删除比较

一、DROP

  drop table tablename

    绝招:删除内容和定义,释放空间。简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表

二、TRUNCATE

  truncate table tablename

    绝招:删除内容、释放空间但不删除定义(表定义和结构)。与drop不同的是,他只是清空表数据而已.执行语句之后,发现数据表的结构还在,也就是不删除定义.

三、DELETE

    delete from tbname 清空表

    delete form tablename where 删除某条记录

    绝招: --虽然也是删除整个表的数据,但是过程是痛苦的(系统一行一行地删,效率较truncate低)

至于释放空间,看下下面两幅图.你们就会明白的

上图:Id列标识列,因之前delete过行数据,所以会出现标识列不连续(体现了delete删除是不释放空间的)

  经过truncate table Teacher 之后 再新增三条数据

上图:同样Id是标识列,发现插入数据的时候,标识列连续了(体现了truncate删除是释放空间)

注意:truncate 不能删除行数据,要删就要把表清空

比较:

  truncate 和 delete 都可以清空表但是,truncate 比 delete速度快,且使用的系统和事务日志资源少。

  TRUNCATE TABLE TableName是一种快速的,无日志记录的,删除表中所有记录的方法。

  delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。所以可以对delete操作进行roll back

  当使用truncate 表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。

  truncate 在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令Delete将被撤销,而 truncate 则不会被撤销。

原文地址:https://www.cnblogs.com/jiechn/p/4200838.html