数据库删除数据的方式主要是有三种: drop, delete, truncate
他们之间的区别在于:
1. 删除的内容不同
-
drop: 用于删除数据库, 数据表 以及 删除数据表中的字段
- 删除数据库: drop database + 数据库名
- 删除数据表: drop table + 数据表名
- 删除数据表中的字段: use 数据库名 alter table 数据表名 drop column 字段名(列名)
-
delete: 删除数据表中的行(某一行 或 所有行)
- 删除数据表中的行: delete from 数据表名 where 列名 = 值
- truncate: 清空表数据, 但不删除这个表, 只是把里面存的数据内容清空掉
2. 语句类型不同
-
delete: 数据库操作语言(DML), 这个操作首先会放到 rollback segement(数据库中的一些存储空间, 用来临时保存在数据库中的数据发生改变时, 改变之前的值) 中, 当事务提交之后才会生效. 如果有相应的 trigger(触发器), 执行的时候将会被触发.
-
drop: 数据库定义语言(DDL), 操作立即生效, 原数据不会放到 rollback segement 中, 不会发生回滚, 操作也不触发 trigger.
-
truncate: 删除表中的所有行, 只删除数据, 其表结构以及约束条件等依然会保留. 操作立即生效, 不触发 trigger.
3. 删除速度不同
一般来说: drop > truncate > delete;