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。这是一般情况,具体情况还得具体分析。
以上即是这三种删除方式的区别。