SQL--delete、drop、truncate的区别
2015-08-03 16:31
671 查看
1、相同:delete、drop、truncate都回删除数据库里的数据。
2、不同:
1)delete:只删除数据,不删除表结构;是dml语言,要提交后才会生效;执行时,有相应的触发器(trigger),会触发;空间资源不影响;
2)drop:删除数据,删除表结构;是ddl语言,自动提交;不会删除依赖于该表的约束,触发器,索引等,但不执行触发器(trigger),;空间释放到 minextents个 extent;
3)truncate:只删除数据,不删除表结构;是ddl语言,自动提交;会删除表中的约束(constrain)、触发器(trigger)、索引(index),依赖于该表的存储过程/函数将保留,但是变为 invalid 状态;drop会释放掉所有的空间资源;
3、速度,一般来说: drop> truncate > delete
truncate删除表中数据时,使用的系统和事务日志少。释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
delete删除表中数据时,每次删除一行,都要在事务日志中为该行记录一项。
4、一般如果要保留表,并且和事务无关的删除性操作使用truncate, 则不会触发trigger, 否则使用delete;
有foreign key约束的表,不能用truncate来删除数据,只能使用delete。
2、不同:
1)delete:只删除数据,不删除表结构;是dml语言,要提交后才会生效;执行时,有相应的触发器(trigger),会触发;空间资源不影响;
2)drop:删除数据,删除表结构;是ddl语言,自动提交;不会删除依赖于该表的约束,触发器,索引等,但不执行触发器(trigger),;空间释放到 minextents个 extent;
3)truncate:只删除数据,不删除表结构;是ddl语言,自动提交;会删除表中的约束(constrain)、触发器(trigger)、索引(index),依赖于该表的存储过程/函数将保留,但是变为 invalid 状态;drop会释放掉所有的空间资源;
3、速度,一般来说: drop> truncate > delete
truncate删除表中数据时,使用的系统和事务日志少。释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
delete删除表中数据时,每次删除一行,都要在事务日志中为该行记录一项。
4、一般如果要保留表,并且和事务无关的删除性操作使用truncate, 则不会触发trigger, 否则使用delete;
有foreign key约束的表,不能用truncate来删除数据,只能使用delete。
相关文章推荐
- 单表扫描,MySQL索引选择不正确 并 详细解析OPTIMIZER_TRACE格式
- Mysql 性能监控及调优
- mysql : Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf16_general_ci,IMPLICIT) for operation '
- MySQL的limit在SQLServer2008 中用top实现
- Mysql高性能维护
- The database principal owns a schema in the database, and cannot be dropped. (.Net SqlClient Data Pr
- mysql架构由小变大的演变过程
- sql 高级 (一) (top子句 like 通配符 IN between )
- SqliteDatabase之SqliteOpenHelper_封装方法
- SqliteDatabase之SqliteOpenHelper(1)
- 何时选用sql或hadoop
- 使用sqoop实现hive与mysql数据库间数据迁移的时,发现如下错误提示
- 如何选择满足需求的SQL on Hadoop系统
- SQL Server 2016 CTP2.2 的关键特性
- mysql之DDL(CREATE ALTER DROP)
- 使用innotop监测mysql
- CentOS6 下MySQL option file
- tpcc-mysql安装、使用、结果解读
- Zabbix 的 MySQL 监控客户端配置
- 搭建MySql的Master/Slave架构