truncate,delete,drop的异同点
说明:本文摘自oracle技术用户讨论组
truncate,delete,drop的异同点
注意:这里说的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,除非使用reuse storage; truncate会将高水线复位(回到最开始).
4.速度,一般来说: drop> truncate > delete
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
> 透明表
每个透明表在数据库中有一个相应的物理表。物理表的名称和数据字典中的逻辑表
定义的名称一致。所有事务和应用数据存贮在透明表中。
结构
结构在数据库不存在数据记录。结构用于在程序之间或程序与屏幕之间的接口定义。
附加结构
附加结构定义字段的子集,该字段属于其他表格或结构,但是在修正管理中作为单
独的对象。
存贮表
存储表可以用来存贮控制数据(例如:屏幕顺序,程序参数或临时数据)。几个存
储表可以组合成一个表库。该表库和数据库中的一物理表库相一致。它包含了各组
合库分派给它的所有记录。
簇表
连续的文本如文档之类可以存贮在簇表中。几个簇表可以组合成一个表簇。对这种
表类型,不同表中的几个逻辑行组合到一物理记录。这可以实现一对象接一对象地
存贮或访问,访问簇中的表的一个前提是,至少关键字的一部分必须相符合。几个
簇表存贮在数据库中 一个相应的表里。
求教BSEG表和与之相关6张表的关系
SAP的财务表中有个BSEG表,比较特殊是个簇表,访问起来比较死板,而且由于是由6个相关表合成的,数据量非常巨大。
哪位大侠能够说说BSEG究竟是怎么整合6张表的,和6张表是什么关系,6张表之间是什么关系
ANSWER:
我对技术不是很懂,但是业务上来讲
BSAD:应收明细(已清帐)
BSID:应收明细(未清帐)
BSAS:总帐明细(已清帐)
BSIS:总帐明细(未清帐)
BSAK:应付明细(已清帐)
BSIK:应付明细(未清帐)
BSEG主要通过“凭证号”“会计年度”“行号”和这六张表关联
一般情况下一笔业务产生的凭证都是未清的,那么:
如果该业务行是客户相关的,则被记录到BSID;
如果该业务行是供应商相关的,则被记录到BSIK;
无论和客户相关还是和供应商相关,都是和总帐相关,所以也会有记录到BSIS;
但是如果这笔业务被清帐了,则相应的记录会从BSI*转移到BSA*
一般情况下:
应收账款、预收账款、其他应收款、应收汇票等科目既和客户相关,又和未清项管理的总帐科目相关;
应付账款、预付账款、其他应付款、应付汇票等科目既和供应商相关,又和未清项管理的总帐科目相关;
其他总帐科目一般不启用未清项管理,所以记录一般都放在BSIS中。
阅读(633) | 评论(0) | 转发(0) |