mysql的delete命令的原理_简单了解SQL常⽤删除语句原理区
主要介绍了SQL删除语句DROP、TRUNCATE、 DELETE 的区别,帮助⼤家更好的理解和学习sql语句,感兴趣的朋友可以了解下
DROP:
DROP TABLE test;
删除表test,并释放空间,将test删除的⼀⼲⼆净。
TRUNCATE:
TRUNCATE test;
删除表test⾥的内容,并释放空间,但不删除表的定义,表的结构还在。
DELETE:
1、删除指定数据
删除表test中年龄等于30的且国家为US的数据
DELETE FROM test WHERE age=30 AND country='US';
2、删除整个表
仅删除表test内的所有内容,保留表的定义,不释放空间。
DELETE FROM test 或者 TRUNCATE test;
truncate table 命令将快速删除数据表中的所有记录,但保留数据表结构。这种快速删除与 delete from 数据表的删除全部数据表记录不⼀样,delete 命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,⽽truncate 命令删除的数据是不可以恢复的。
相同点
sql中delete用法truncate 和不带 where ⼦句的 delete, 以及 drop 都会删除表内的数据。
不同点:
1. truncate 和 delete 只删除数据不删除表的结构(定义) ,drop 语句将删除表的结构被依赖的约束(con
strain), 触发器(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, 尤其没有备份的时候。否则哭都来不及。
最后
使⽤上, 想删除部分数据⾏⽤ delete, 注意带上 where ⼦句。 回滚段要⾜够⼤。
想删除表, 当然⽤ drop。
想保留表⽽将所有数据删除。如果和事务⽆关, ⽤ truncate 即可。 如果和事务有关, 或者想触发 trigger, 还是⽤ delete。
如果是整理表内部的碎⽚, 可以⽤ truncate 跟上 reuse stroage, 再重新导⼊/插⼊数据。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持脚本之家。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。