deletetruncate(deletetruncatedrop的区别)
delete、truncate的相同点不同点是什么
相同点:都是删除数据,truncate效果等同于不带where的delete
不同点:delete删除时要详细记录事务日志,而truncate只记录truncate操作,不记录具体数据操作,所以truncate操作要比delete快得多(ps:一旦用了truncate很难进行数据库恢复,慎用);
恩。。自己总结的还是不好啊,直接贴联机丛书的吧
与 DELETE 语句相比,TRUNCATE TABLE 具有以下优点:
所用的事务日志空间较少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一个项。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。
使用的锁通常较少。当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页,而不是锁定各行。
如无例外,在表中不会留有任何页。执行 DELETE 语句后,表仍会包含空页。例如,必须至少使用一个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后台清除进程迅速释放。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。若要删除表定义及其数据,请使用 DROP TABLE 语句。
如果表包含标识列,该列的计数器重置为该列定义的种子值。如果未定义种子,则使用默认值 1。若要保留标识计数器,请使用 DELETE。
限制
不能对以下表使用 TRUNCATE TABLE:由 FOREIGN KEY 约束引用的表。(您可以截断具有引用自身的外键的表。)参与索引视图的表。通过使用事务复制或合并复制发布的表。对于具有以上一个或多个特征的表,请使用 DELETE 语句。TRUNCATE TABLE 不能激活触发器,因为该操作不记录各个行删除
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、不能清空父表。
数据库操作
使用方法:
truncate table table_name;
操作特性:
truncate 只删除表中的所有数据,不删除表的结构;
truncate 使ddl操作立即生效,原数据不放到rollback segment中,不能回滚,操作不触发trigger;
truncate 语句缺省情况下将空间释放到 minextents个 extent,除非使用reuse storage;
truncate 会将高水线复位(回到最开始)。
截取字符串
smarty truncate 截取
从字符串开始处截取某长度的字符.默认是80个。
你也可以指定第二个参数作为追加在截取字符串後面的文本字串.该追加字串被计算在截取长度中。
默认情况下,smarty会截取到一个词的末尾。
如果你想要精确的截取多少个字符,把第三个参数改为"true" 。
例 截取:
index.php:
$smarty = new Smarty;
$smarty-assign('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.');
$smarty-display('index.tpl');
index.tpl:
{$articleTitle}
{$articleTitle|truncate}
{$articleTitle|truncate:30}
{$articleTitle|truncate:30:""}
{$articleTitle|truncate:30:"---"}
{$articleTitle|truncate:30:"":true}
{$articleTitle|truncate:30:"...":true}
输出结果:
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after...
Two Sisters Reunite after
Two Sisters Reunite after---
Two Sisters Reunite after Eigh
Two Sisters Reunite after E...
drop、truncate、delete三种删除的区别
drop:drop table 表名 (删除整个表)
删除内容和定义,并释放空间。执行drop语句,将使此表的结构一起删除。也就是删除整个表。操作不能回滚。
truncate:truncate table 表名 (清空表中的所有数据)
删除内容、释放空间但不删除定义(也就是保留表的数据结构)。与drop不同的是,只是清空表数据而已。
truncate不能删除行数据,虽然只删除数据,但是比delete彻底,它只删除表数据。操作不能回滚。整表数据清空。
delete:delete from 表名 (where 列名 = 值) (删除一行数据)
与truncate类似,delete也只删除内容、释放空间但不删除定义;但是delete即可以对行数据进行删除,也可以对整表数据进行删除。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。
原文链接:
详解Oracle DELETE和TRUNCATE 的区别
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和delete的区别
1、空间不同:
表和索引所占空间。当表被truncate 后,这个表和索引所占用的空间会恢复到初始大小,delete操作不会减少表或索引所占用的空间。
2、应用范围不同:
truncate 只能对table;delete可以是table和view。
3、作用不同:
truncate 和delete只删除数据, drop则删除整个表(结构和数据)。
扩展资料:
函数说明:truncate()会将参数path指定的文件大小改为参数length指定的大小。 如果原来的文件大小比参数length大,则超过的部分会被删除
返回值:执行成功则返回0, 失败返回-1, 错误原因存于errno
错误代码:EACCESS 参数path所指定的文件无法存取
EROFS 欲写入的文件存在于只读文件系统内
EFAULT 参数path指针超出可存取空间
参考资料来源:百度百科-truncate
delete和truncate之间的差别有哪些
delete和truncate命令之间的差别
1、命令类型
delete是数据操作语言(DML)命令;而truncate是数据定义语言(DDL)命令。
2、功能
delete命令根据指定的SQL语句从表中删除单个,多个或所有记录;而truncate命令从数据库中删除所有记录和表结构。
3、Where子句
delete命令支持WHERE子句,可以使用带有DELETE的where子句来过滤和删除特定记录;而,truncate命令不支持WHERE子句。
4、锁定
delete命令采用行级锁定,表中的每一行都被锁定以进行删除;truncate命令采用表级锁定,锁定了整个表以删除所有记录。
5、索引视图
delete命令可以与索引视图一起使用;而,truncate命令不能与索引视图一起使用。
6、执行速度
由于delete命令维护日志,因此速度很慢。但是,由于truncate命令在事务日志中维护最少的日志记录,因此执行速度更快。
7、表结构
delete命令不会影响表结构,而truncate命令会从数据库中删除表结构。
8、事务空间
delete命令比truncate命令使用更多的事务空间。