MySQL 知识 -- drop、delete 和 truncate 的区别
本文最后更新于:5 天前
⚡drop
直接删除表
⚡truncate
直接删除表的数据
⚡delete
删除表的数据,可以添加 where 字句
⚡区别
-
删除效果不同。
-
delete 是一行行删除表的数据
-
truncate 是一次性从表中删除所有的数据,删除时不会激活与表有关的触发器
-
drop 不仅删除数据也会删除表结构,删除时,相关的约束、触发器、索引、存储过程会被保留,但是状态会变为 invalid
-
-
应用范围不同。
-
truncate 只能使用于 table ,而 delete 和 drop 可以用于 table 和 view
-
对于由 FOREIGN KEY 约束引用的表,不能使用 truncate,而应使用不带 where 子句的 delete 语句。
-
-
所属级别不同。
-
delete 语句为 DML(Data Manipulation Language,数据操作语言,是对如和操作某些数据而言的),操作会被放到 rollback segment 中,事务提交才生效,如果有触发器 trigger 也会被触发。
删除时,同时将该行的删除操作作为事务,记录在日志中保存,可以回滚
-
truncate 和 drop 都是 DLL(Data Define Language,数据定义语言,是对数据库和数据表的定义而言的),
删除时,不会把删除操作记录记入日志保存,删除不可通过回滚恢复
-
-
删除速度不同
一般来说 drop > truncate > delete
-
自增标识。
truncate 新行标识所用的计数值重置为该列的种子。delete 则会保留原有的标识计数值。
本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 。转载请注明出处!