truncate、delete、drop区别
语法:
- truncate table 表名
- delete from 表名
- drop table 表名
应用范围:
- truncate 只能对表,且不能用于参与了索引的表,不能用于外键约束引用的表
- delete 可以是表或视图
区别:
- truncate和delete只删除表中的数据,保留数据表结构
- drop则删除整张表。被依赖的约束(constrain)、触发器(trigger)、索引(index)也都被删除;依赖于该表的存储过程/函数将保留,但是变为invalid状态
删除速度:
- drop > truncate > delete
- delete的效果有点像将mysql表中所有记录一条一条删除到删完
- truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表
可恢复性:
- delete删除的数据存储在系统回滚段rollback segment中,需要的时候,数据可以回滚恢复
- truncate删除的数据不可恢复,删除速度非常快
是否触发trigger:
- delete是dml,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发
- truncate和drop是ddl,操作立即生效;操作不触发trigger
对自增字段的影响:
- delete之后,重新插入数据,带有自增字段的列仍保留原来的最大值
- truncate之后,从头开始计数
建议:
- 想删除整张表,用drop
- 想保留表,而删除所有数据:1.和事务无关,用truncate 2.和事务有关,或者想触发trigger,用delete
- 想删除部分数据行,用delete,注意带上where子句
truncate、delete、drop区别的更多相关文章
- TRUNCATE DELETE DROP 区别
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源 ...
- SQL truncate/delete/drop 区别
相同点 1. truncate 和不带 where 子句的 delete 以及 drop 都会删除表内的数据. 2. drop/truncate 都是 DDL 语句(数据定义语言),执行后会自动提交. ...
- MySQL——delete 和 truncate 以及 drop 区别
delete 和 truncate 以及 drop 区别 (个人理解,如有错误,请指出) delete < truncate < drop 删除方式: truncate 只删除数据.逐条 ...
- Sybase:delete与truncate、drop区别
Sybase:delete与truncate.drop区别 区别: TRUNCATE TABLE TABLENAME:删除内容.释放空间但不删除定义. DELETE FROM TABLENAME:删除 ...
- truncate,delete,drop的异同点
说明:本文摘自oracle技术用户讨论组 truncate,delete,drop的异同点 注意:这里说的delete是指不带where子句的delete语句 相同点:truncate和不带w ...
- sql 删除表数据truncate delete drop的区别
已下内容为转载内容:学习之用 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. ...
- (转)iOS sqlite :truncate/delete/drop区分
转自:http://blog.sina.com.cn/s/blog_6755689f0101fofb.html 相同点: 1.truncate和不带where子句的delete.以及drop都会删除表 ...
- drop、truncate和delete的区别
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源 ...
- truncate table,drop,delete的区别
TRUNCATE TABLE 在功能上与不带 Where 子句的 Delete 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 Delete 速度快,且使用的系统和事务日志资源 ...
- SQL-truncate && delete && drop 的区别
有些人在删除表的所有记录的时候,喜欢这样来——不给DELETE 语句提供WHERE 子句,表中的所有记录都将被删除.但这种方法是不可取的,正确的应该使用 TRUNCATE TABLE tb_name ...
随机推荐
- Android Studio 每次运行都会再下载一遍,修改
Android Studio 每次运行都会再下载一遍 把 gradle 设置 use local gradle distribution
- Windows7安装程序无法定位现有系统分区,也无法创建新的系统分区
解决Windows7.Windows8系统安装时“安装程序无法定位现有系统分区,也无法创建新的系统分区”提示. 方法一 把Windows7镜像发在你电脑的非系统盘的其他硬盘上. 重启机器,通过U盘启动 ...
- feign无法注入service
https://segmentfault.com/q/1010000008531927
- [Luogu 1262] 间谍网络
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
- Zabbix Server 监控Web页面
Zabbix Server 监控Web页面 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.选中一台可以连接互联网的主机 2>.创建一个web场景,点击“Crea ...
- springMVC的全局异常设置
先说为什么要设置全局异常.比如说,你程序出错了,500错误,大家都知道,程序出错就不会往下面执行,但是客户端那边还是一直等待状态,所以,我们后台无论正常还是报错都要给客户端返回数据.当然,我们可以tr ...
- Ubuntu修改Apache默认Web端口
改成你要的端口,默认为80,这里我改成了8080,https改成了444,保存之后寻找000/default.conf并修改成和ports.conf文件一样的http端口,然后重启Apache服务器即 ...
- Docker 从入门到放弃(二)容器使用
Docker 容器使用 一.Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项. root@iZ235mi4a64Z ...
- log 的 debug()、 error()、 info()方法
log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF.FATAL.ERROR.WARN.INFO.DEBUG.TRACE. ALL. 简单的说,就是 ...
- 很好的sql多表
oracle 多表联合查询总结归纳 2018年08月16日 20:57:39 阅读数:44905 本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: ...