truncate delete, drop 语句区别

truncate 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,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据

时间: 2024-11-05 16:28:27

truncate delete, drop 语句区别的相关文章

sql中truncate,delete,drop的区别

不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.  代码如下 复制代码 Truncate是SQL中的一个删除数据表内容的语句,用法是: 语法 TRUNCATE TABLE name    参数 name 是要截断的表的名称或要删除其全部行的表的名称 Truncate table 表名 速度快,

truncate,delete,drop的异同点

 truncate,delete,drop的异同点 说明:本文摘自oracle技术用户讨论组 truncate,delete,drop的异同点  注意:这里说的delete是指不带where子句的delete语句   相同点:truncate和不带where子句的delete, 以及drop都会删除表内的数据  不同点:  1. truncate和 delete只删除数据不删除表的结构(定义)       drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索

sql truncate和delete用法与区别

你就需要了解MySQL的Delete语句了.MySQL为我们提供了delete和truncate语句来删除数据. delete 语句的定义: 经常和数据库打交道的孩子们,删除数据的时候用的大多都是 delete 语句.现在让我们来看一下 delete语句的定义. DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name     [WHERE where_definition]     [ORDER BY ...]     [LIMIT row_co

关于delete,drop,truncate的问题

有一个很常规的问题大量出现在笔试面试中,就是delete,truncate和drop的区别,当然这个问题我们也可以升华一下,通过这个简单的问题其实可以关联到Oracle的一些特性. 我们先来看看常规的问题,常规的回答. 从网上也搜了一些答案,自己也略微做了改动.相同点: 1.truncate和不带where子句的delete, 以及drop都会删除表内的数据. 2.drop,truncate都是DDL(数据定义语言)语句,执行后会自动提交.不同点: 1. truncate和 delete只删除数

database-delete from table_name 和 delete * from table_name 区别?

问题描述 delete from table_name 和 delete * from table_name 区别? sql标准中有 delete * from 这样的语句吗?为什么有的数据库可以用 delete * from table_name ? 解决方案 delete * from table_name仅仅能删除表中数据,不能清空标识,删除表中数据后再重新写入数据时,标识符会从删除前标识最大加1开始.希望对您有帮助! 解决方案二: 没有发现有 delete * from语句.在哪里见到的

[20150918]禁止用户truncate以及drop表.txt

[20150918]禁止用户truncate以及drop表.txt --一个需求要求禁止用户truncate以及drop表,实际上很简单仅仅建立一个触发器就ok了. CREATE OR REPLACE TRIGGER SYS.tri_prevent_drop_truncate    BEFORE TRUNCATE OR DROP ON DATABASE BEGIN    IF ora_dict_obj_type = 'TABLE' AND ora_dict_obj_owner = 'SCOTT'

c++-struct B { B(B&&) = delete; }; //这个语句是什么意思

问题描述 struct B { B(B&&) = delete; }; //这个语句是什么意思 struct B { B(B&&) = delete; }; //这个语句是什么意思,关系到c++的那个知识点 解决方案 c++ 11,构造函数B(),带有右值的构造函数(B&&),delete不允许特殊类型函数被使用,综合起来就是禁用带有右值的构造函数. 解决方案二: 不允许这个形式的构造函数 解决方案三: B&&是什么意思? 解决方案四: ht

C# while与for 循环语句区别

c# while与for 循环语句区别 while 语句执行一个语句或语句块,直到指定的表达式计算为 false. // statements_while.cs using system; class whiletest {     static void main()     {         int n = 1;         while (n < 6)         {             console.writeline("current value of n is {

DELETE FROM 语句用于从数据库表中删除行

删除数据库中的数据 DELETE FROM 语句用于从数据库表中删除记录. 语法 DELETE FROM table_name WHERE column_name = some_value 注释:SQL 对大小写不敏感.DELETE FROM 与 delete from 等效. 为了让 PHP 执行上面的语句,我们必须使用 mysql_query( 函数.该函数用于向 SQL 连接发送查询和命令. 例子 稍早时,我们在本教程中创建了一个名为 "Person" 的表.它看起来类似这样: