百度
360搜索
搜狗搜索

truncate带条件,详解Oracle DELETE和TRUNCATE 的区别详细介绍

本文目录一览: TRUNCATE TABLE 语句中可以带有where字句吗

不可以的。TRUNCATE 删除表,默认选择为整个表的内容,所以不能加条件。DELETE 删除表,可以回退。可以带where 条件。例如Delete from table where id =1;
不带TRUNCATE删除表,无法回退。默认选择为整个表的内容,所以不能加条件。DELETE删除表,可以回退。可以带where条件。建议使用delete。但是TRUNCATE删除表数据比delete要快。

回答数据库表数据删除两种语法的区别是什么

当表中的数据不需要时,则应该删除该数据并释放所占用的空间,删除表中的数据可以使用Delete语句或者Truncate语句,下面分别介绍。
一、delete语句
(1)有条件删除
语法格式:delete [from] table_name [where condition];
如:删除users表中的userid为‘001'的数据:delete from users where userid='001';
(2)无条件删除整个表数据
语法格式:delete table_name;
如:删除user表中的所有数据:delete users ;
二、Truncate语句
使用Truncate语句是删除表中的所有记录。
语法格式: Truncate [table] table_name;
(1)删除所有记录不保留记录占用空间
Truncate [table] table_name [drop storage];
如:删除users表中的所有数据并不保存占用空间: Truncate table users drop storage; 由于默认使用drop storage关键字,所以可以省略 drop storage;
(2)删除所有记录保留记录占用空间
Truncate [table] table_name [reuse storage];
如:删除users表中的所有数据并保存占用空间: Truncate table users reuse storage;
三、两种删除语句的对比
由于delete语句删除记录时候,记录是逐条删除的,而Truncate 语句删除数据时不产生回退信息;所以如果需要删除大量数据的时候使用delete则占用较多的系统资源,而如果使用Truncate 则会快的多。
下面通过实例说明一下:
1、首先建立user表:
create table users
(
userid varchar2(20) ,
username varchar2(30),
userpass varchar2(30)
);复制代码
2、接着插入一条数据
insert into users values('001','GavinDream','123456'); 3、使用复制插入方法插入几万条数据

sql中能使用 truncate实现有条件的删除吗?我试了试,好像不能。我需要确定一下,如果能,如何写。

没有。只能全表删除。这个不是简单的删除记录,这个命令叫删减表,内部机制与delete是不一样的。
truncate的工作机制就是直接清空表的内容,例如,在Oracle中实际上只是将高水位线设为0,并没有对实际的数据进行操作,所以这个操作就很快。既然如此,也就不可能实现你所说的有条件的删除了。

sql server语句中delete和truncate的区别

delete 是一条一条删除的,加条件可以删除某一条,
truncate是将整个表清空,你加不加条件都没用,再就是前者删除后自增列依旧会再原基础上增加,后者将重新计数 ~
相同点:
1.truncate和不带where子句的delete、以及drop都会删除表内的数据。
2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。
不同点:
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,再重新导入/插入数据。
6.delete是DML语句,不会自动提交。drop/truncate都是DDL语句,执行后会自动提交。
7、TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
8、TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。 9、对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
10、TRUNCATE TABLE 不能用于参与了索引视图的表。
资料来源于:
www.cnblogs.com/8765h/archive/2011/11/25/2374167.html

1、删除数据库表中的数据有几种方法?

一、【delete方式】
语法:delete 表 where 筛选条件
实例1:delete 员工表 where 姓名= '张红' //--注释:从员工表中删除姓名为张红的记录
实例2:delete 员工表 //--注释:删除员工表的所有数据
二、【truncate方式】
语法:truncate 表
实例:truncate 员工表 //--注释:删除员工表的所有数据
【共同点】:
如果delete不加where子句(不限定删除的条件),那么delete方式与truncate方式的执行结果完全一致。
【区别】:
1、delete方式可以用where子句限定删除条件,而truncate方式不能限定条件,它只能删除整表数据;
2、使用delete方式删除数据,会被记载到日志中,且可以使用事务回滚(rollback)恢复数据,而truncate方式不记录日志。
以下两种方式:
一、【delete方式】
语法:delete 表 where 筛选条件。
实例1:delete 员工表 where 姓名= '张红' //--注释:从员工表中删除姓名为张红的记录。
实例2:delete 员工表 //--注释:删除员工表的所有数据。
二、【truncate方式】
语法:truncate 表。
实例:truncate 员工表 //--注释:删除员工表的所有数据。
相关介绍:
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。
即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
数据库是一个按数据结构来存储和管理数据的计算机软件系统。数据库的概念实际包括两层意思:
(1)数据库是一个实体,它是能够合理保管数据的“仓库”,用户在该“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。
(2)数据库是数据管理的新方法和技术,它能更合适的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。

什么语句不能设置操作的where条件

TRUNCATE不能设置操作的where条件。根据查询相关资料信息显示,truncate语句不能带where条件意味着只能全部数据删除,delete可删除部分数据。

DELETE与TRUNCATE有什么不同

DELETE与TRUNCATE有什么不同 删除表中的数据的方法有delete,truncate, 它们都是删除表中的数据,而不能删除表结构,delete 可以删除整个表的数据也可以删除表中某一条或N条满足条件的数据,而truncate只能删除整个表的数据,一般我们把delete 操作叫作删除表,而t DELETE与TRUNCATE有什么不同删除表中的数据的方法有delete,truncate,它们都是删除表中的数据,而不能删除表结构,delete 可以删除整个表的数据也可以删除表中某一条或N条满足条件的数据,而truncate只能删除整个表的数据,一般我们把delete 操作叫作删除表,而truncate操作叫作截断表.truncate 操作与 delete 操作对比操作回滚高水线空间效率Truncate不能下降回收快delete可以不变不回收慢TRUNCATE和DELETE有以下几点区别1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。4、TRUNCATE不能触发任何DELETE触发器。5、不能授予任何人清空他人的表的权限。6、当表被清空后表和表的索引将重新设置成初始大小,而delete则不能。7、不能清空父表。 ,

阅读更多 >>>  如何删除C盘软件

sql server基本常识

使用 TRUNCATE TABLE 删除所有行
若要删除表中的所有行,则 TRUNCATE TABLE 语句是一种快速、无日志记录的方法。该语句总是比不带条件的 DELETE 语句要快,因为 DELETE 语句要记录对每行的删除操作,而 TRUNCATE TABLE 语句只记录整个数据页的释放。TRUNCATE TABLE 语句立即释放由该表的数据和索引占用的所有空间。所有索引的分发页也将释放。

与 DELETE 语句相同,使用 TRUNCATE TABLE 清空的表的定义,同其索引和其它相关的对象一起仍保留在数据库中。必须使用 DROP TABLE 语句才能除去表的定义。

TRUNCATE TABLE tablename
----------------------
TRUNCATE TABLE
删除表中的所有行,而不记录单个行删除操作。

语法
TRUNCATE TABLE name

参数
name

是要截断的表的名称或要删除其全部行的表的名称。

注释
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。

DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。

TRUNCATE TABLE 不能用于参与了索引视图的表。

示例
下例删除 authors 表中的所有数据。

TRUNCATE TABLE authors

详解Oracle DELETE和TRUNCATE 的区别

从别处摘的。
1. DELETE
 ?DML语言
 ?可以回退
 ?可以有条件的删除
DELETE FROM 表名
  WHERE 条件
2.TRUNCATE TABLE
 ?DDL语言
 ?无法回退
 ?默认所有的表内容都删除
 ?删除速度比delete快。
TRUNCATE TABLE 表名
delete 删的慢 写大量日志
truncate 删的快 写少量日志
SQL> select count(*) from test;
COUNT(*)
----------
2783488
Elapsed: 00:00:00.22
SQL> select count(*) from test1;
COUNT(*)
----------
2783488
Elapsed: 00:00:00.34
SQL> select object_name,object_id,data_object_id from dba_objects where object_name in ('TEST','TEST1');
OBJECT_NAM OBJECT_ID DATA_OBJECT_ID
---------- ---------- --------------
TEST1 88856 88856
TEST 88851 88851
Elapsed: 00:00:00.01
SQL> delete from test;
2783488 rows deleted.
Elapsed: 00:03:04.93
SQL> truncate table test1;
Table truncated.
Elapsed: 00:00:02.03
SQL> select object_name,object_id,data_object_id from dba_objects where object_name in ('TEST','TEST1');
OBJECT_NAM OBJECT_ID DATA_OBJECT_ID
---------- ---------- --------------
TEST1 88856 88857
TEST 88851 88851
Elapsed: 00:00:00.14
这个比较简单了,有很多地方不同,百度上一搜一堆。
大概说下
1、DELETE是逐行删除,所以在删除大量数据的时候速度慢,影响数据库效率;
TRUNCATE的话,是整表删掉(专业术语叫截短,截断),删除大量数据的时候有优势,不影响数据库运行效率。
2、DELETE触发行级触发器,T则不触发行级的触发器。
3、DELETE会做日志什么的bulabula之类的,这样可以在必要的时候回滚。T则没这么多规则,T了之后找不回来。
Oracle中truncate和delete的区别如下:
1、delete from后面可以写条件,truncate不可以。
2、delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少。
3、delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
4、当使用行锁执行DELETE语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。
5、如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变,而truncate后,种子会恢复初始。
6、truncate不会触发delete的触发器,因为truncate操作不记录各个行删除。
总结:
1、truncate和delete只删除数据不删除表的结构(定义)。
2、delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发。
truncate是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。
3、delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始)。
4、速度,一般来说: truncate > delete。
5、安全性:小心使用truncate,尤其没有备份的时候。

网站数据信息

"truncate带条件,详解Oracle DELETE和TRUNCATE 的区别"浏览人数已经达到20次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:truncate带条件,详解Oracle DELETE和TRUNCATE 的区别的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!