命令行调用存储过程程里面不能用truncate命令么

最近到了系统开发后期,需要对数据进行按时间备份。备份完成后对之前数据表的处理就只有删除了,突然查下资料,发现删除还是挺多的。显而易见都明白此刻应该用什么删除了。就不在此讨论解决方案了,只总结交流知识点。
truncate table命令将快速删除数据表中的所有记录,但保留数据表结构。这种快速删除与delete from 数据表的删除全部数据表记录不一样,delete命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,而truncate命令删除的数据是不可以恢复的&可以做一个测试&建一个带有自增字段的表,加入100万数据&然后分别用TRUNCATE和DELETE删除全部数据&然后再向表里插入一条数据&最直观是:&1.TRUNCATE TABLE是非常快的&2.TRUNCATE之后的自增字段从头开始计数了,而DELETE的仍保留原来的最大数值&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&注意:这里说的delete是指不带where子句的delete语句&相同点&truncate和不带where子句的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,除非使用&& truncate会将高水线复位(回到最开始).&4.速度,一般来说: drop&; truncate &; delete&5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.&想删除表,当然用drop&想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.&如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据&语句实例:&truncate table tax_yys
阅读(...) 评论()过程中truncate失效以上是我的存储过程,但每次调用时stat_power表并没有清空,而是在原来的表里增加了这次执行结果的内容请问应该怎么解决?--------------------------------------------------------------有无提示truncate table stat_select *
from stat_什么结果------解决方案--------------------------------------------------------数据应该是清除了。估计是你后面的问题。建议给出你的测试用例,想办法让别人可以在自己的机器上模拟你的问题。
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u//7c-4c2d-9415-fa46604a00cf.html
无相关信息ORACLE存储过程中如何执行TRUNCATE TABLE - Oracle,数据库 - Tech - ITeye论坛
ORACLE存储过程中如何执行TRUNCATE TABLE
锁定老帖子
该帖已经被评为隐藏帖
jiaoronggui
来自: 合肥
发表时间:&&
相关知识库:
默认在存储过程中是不允许执行truncate table tablename操作,如何执行了
immediate 'truncate table tablename';即可
跳转论坛:移动开发技术
Web前端技术
Java企业应用
编程语言技术> mysql存储过程中truncate失效SQLcodedelimiter//CREATEPROCE
mysql存储过程中truncate失效SQLcodedelimiter//CREATEPROCE
xcxjin & &
发布时间: & &
浏览:1 & &
回复:2 & &
悬赏:0.0希赛币
mysql存储过程中truncate失效  SQL code   delimiter // CREATE PROCEDURE sp_power() begin
declare l_id bigint(20);
declare l_power smallint(6);
declare no_more_device int default 0;
declare power_csr CURSOR FOR
SELECT dev_id,power_stat FROM
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_device=1;
SET no_more_device = 0;
create table if not exists stat_power(dev_id bigint(20),dev_power smallint(6));
truncate table stat_
open power_
dev_loop:repeat
fetch power_csr into l_id,l_
if no_more_device then
leave dev_
if l_power & 11 then
insert into stat_power values(l_id,l_power);
until no_more_device
end repeat dev_
close power_
set no_more_device = 0; end //
以上是我的存储过程,但每次调用时stat_power表并没有清空,而是在原来的表里增加了这次执行结果的内容请问应该怎么解决?
有无提示truncate table stat_select *
from stat_什么结果
xcy97524 & &
16:45:07 & &
& & (0)(0)数据应该是清除了。估计是你后面的程序问题。建议给出你的测试用例,想办法让别人可以在自己的机器上模拟你的问题。
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式xcxxlyx & &
16:45:07 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&语法delete from aa truncate table aa
区别 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只删除数据不删除表的结构(定义)&&&& && 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,除非使用&& truncate会将高水线复位(回到最开始)。
&4.速度,一般来说: drop& truncate & delete。
&&&& 5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及。
6.使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.&&&& 想删除表,当然用drop&&&& 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
阅读(...) 评论()}

我要回帖

更多关于 truncate命令 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信