zoukankan      html  css  js  c++  java
  • 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子句



  • 相关阅读:
    委托
    SQL Server 2012 学习笔记5
    SQL Server 2012 学习笔记4
    SQL Server 2012 学习笔记3 增查改删
    SQL Server 2012 学习笔记2
    SQL Server 2012 学习笔记1
    PCD文件去除曲率的脚本
    pcl曲面网格模型的三种显示方式
    pcl计算样点法向并显示
    Markdown的使用---现学现用
  • 原文地址:https://www.cnblogs.com/xiaochongc/p/9824213.html
Copyright © 2011-2022 走看看