关于sql中drop、truncate、delete的探讨

SQL中有三种删除数据的方式,分别是:

1. 使用truncate

TRUNCATEtable [表名称]

这个语句用来删除整个表的数据内容,但表本身的结构还是保存下来的,包括表的定义、索引的定义等,都还保留着。看起来,这种方式是用来清理数据库内容的。

 

2.使用delete

DELETE FROM 表名称  WHERE 列名称=值 #用于删除特定的行
DELETE FROM 表名称  #用于删除整个表的数据

 

3. 使用drop

DROP Table 表名称

DROP方式删除表,会将表本身也删除掉。比如 ,有一个Person表,你想清理里面的内容,用了DROP语句,则会把这个表也删除,下次你再insert一个Person记录,则会报表不存在的错误。但如果你改用truncate、delete,则不会有这个问题。

 

 

以下谈谈这三种方式的区别。

1. truncate、drop 是DDL语句,什么是DDL、DML语句?这个可自行搜索。有个重点,DDL语句是不能回滚的。因此,如果是使用truncate语句删除数据库表中的内容,则马上会生效,不用提交,也无法回滚,这点要切记!!!另外,truncate也不能带where条件,也就是说,truncate是用来删除整个表的数据内容的。 

2. delete 语句是DML语句,支持回滚,在执行完delete后,还需要再执行commit才会生效。

3. 对于高水位(Hihg water mark)的影响。

HWM这个概念似乎只有oracle才有,如果mysql也有的话,麻烦大家指出。

按oracle官方文档的意思如下:

To manage space, Oracle Database tracks the state of blocks in the segment. The high water mark (HWM) is the point in a segment beyond which data blocks are unformatted and have never been used.

HWM 用来说明数据库的使用情况,可以理解成数据库最多使用过多少数据块。HWM只增不减,有点类似水库的历史最高水位。

如果是使用DROP,则表直接删了,也就无所谓存在HWM了。

用DELETE语句,HWM不会改变

用TRUNCATE,HWM会复位成0

 

4. 在执行速度上,drop> truncate > delete。这是一般情况,具体情况还得具体分析。

 

以上即是这三种删除方式的区别。

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值