drop:直接删除表;包括表数据和表结构。
drop table 表名;truncate:删除表中的所有数据,并且会将表锁占用的空间全部释放; 再插入数据的时候,自增id又会从1开始。
truncate table 表名;delete:删除表中的数据,可以利用where子句进行控制约束删除范围。delete删除表中的记录后,再插入数据,对于设置有自增约束字段的值惠从何删除前表中该字段的最大值加1开始自增。
删除表中的全部数据 delete from 表名; 删除表中指定数据 delete from 表名 where条件子句从下面几个方面来看三者之间的详细区别:
1、删除 (1)delete语句执行删除操作的过程是每次从表中删除一行,并且同时将改行的删除操作作为事务记录在日志中保存以便进行回滚操作。 (2)truncate是一次性从表中删除所有的数据并不把单独的删除记录记入日志中保存,删除行是不能恢复的;但不删除数据表结构,再插入时自增id又从1开始。 (3)drop直接删除整张表,包括数据和表结构。 2、是否回滚句,和触发触发器 (1)delete语为DML,delete操作会进行回滚操作,事务提交后才生效。如果有想应的触发器(tigger),执行时会被触发。 (2)truncate和drop是DLL,操作立即生效,不进行回滚。不触发触发器。
DML(data manipulation language): 数据操纵语言 就是我们经常使用的select、update、insert、delete DDL(data definition language): 数据库定义语言 就是我们在创建表的时候用到的sql,比如:create、alter、drop等 DDL主要是用在定义或者改变表的结构,数据类型,表之间的连接和约束等初始化工作上。3、是否释放表和索引所占的空间: (1)使用truncate后,表和索引所占的空间会恢复到初始大小 (2)使用delete后不会减少表或索引锁占用的空间 (3)使用drop后,会将表所占用的所有空间全部释放掉 4、一般而言,速度上 dop>truncate>delete 5、应用范围 truncate只能对table;delete可以是table和view 6、delete不带where子句与truncate的功能相同,都是删除表中所有数据;但是truncate table比delete的速度快,并且使用的系统和事务日志资源少。 delete语句每次删除一行,会在日志中为所删除的每行记录意向。truncate table通过释放存储表数据所用的数据也来删除数据,并且只在事务日志中记录页的释放。 7、drop将会删除表结构所依赖的约束、触发器、索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态。 8、小结: (1)需要删除部分数据使用delete并结合where子句进行约束;处理与事务有关,并需要触发触发器使用delete (2)需要删除整张表,使用drop (3)需要保留表结构但删除表中数据,且与事务无关使用truncate