永发信息网

详解SQL中drop,delete和truncate的异同

答案:2  悬赏:30  手机版
解决时间 2021-11-22 22:42
详解SQL中drop,delete和truncate的异同
最佳答案
第一:相同点:
truncate和不带where子句的delete,以及drop 都会删除表内的数据

第二:不同点:
1. truncate和delete只删除数据不删除表的结构(定义)
drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。
2. delete 语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的trigger执行的时候将被触发。
truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到rollback segment中,不能回滚,操作不触发 trigger。
3.delete 语句不影响表所占用的extent,高水线(high watermark)保持原位置不动;
显然drop 语句将表所占用的空间全部释放; truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;truncate 会将高水线复位(回到最开始)。
4.速度:一般来说: drop> truncate > delete
5.安全性:小心使用 drop 和 truncate,尤其没有备份的时候.,否则哭都来不及。
6.使用上:想删除部分数据行用delete,注意带上where子句. 回滚段要足够大。
想删除表,当然用drop。
想保留表而将所有数据删除,如果和事务无关,用truncate即可;如果和事务有关,或者想触发trigger,还是用delete。
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
全部回答
drop 是删除表、视图、触发器等,删除数据结构。
truncate,delete都是删除表的数据,前者相当于WINDOWS系统里的SHIFT加删除,无法通过rollback进行数据回滚,删除速度很快。后者相当WINDOWS系统里的删除,可以通过rollback进行回滚,删除速度较慢。
当然,删除速度快慢是建立在数据量非常大的基础上的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
北京华鑫利达商贸有限公司地址在什么地方,我
你好,国外筹建砖厂需考察哪些方面
羟基红花黄色素A的概述
严重不良事件和重要不良事件的区别?
扑救c类火灾应选用哪些类型的灭火器
怀孕44天孕囊3.3x2.7x0.9 应该男女孩
青岛387路公交车多长时间一班
王者荣耀10月1充值反利1号算不算
从增产到大马村怎么坐公交车,最快需要多久
古代大哥的称呼
我在无锡安装了一个电信宽带,没用几个月,搬
宜人理财可靠吗
这块翡翠怎么样
环盛里小区怎么样?好不好?值不值得买?
瑞鑫宾馆(镇艺路)地址有知道的么?有点事想过
推荐资讯
面试时如何回答期望工资是多少
Centos文件系统EXT3与EXT4的主要区别
深圳实施工程师底薪4.5K,对新人来说算好吗?
车库的英文怎么写
U盘有一种类似于FAT格式的,但可以储存单个超
锦州什么报纸看的人最多?
元宵节的童谣
想学中餐,现在该怎么办?
我的冬奥梦语文作文
猎狗什么时候开始训练最好
DOTA 6.72AI 打不过电脑
家庭制作酒枣多长时间可以吃
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?