oracle 中约束的应用
如果禁用约束条件,则可以在数据库中输入不符合规则的数据。启用约束:enable( validate) :启用约束,创建索引,[color=white]对已有及新加入的数据执行约束.enable novalidate :启用约束,创建索引,[color=white]仅对新加入数据强制执行约束,而不管表中现有数据. 禁用约束:disable( novalidate):关闭约束,删除索引,[color=white]可以对约束列的数据进行修改等操作[color=white].disable validate :关闭约束,删除索引,[color=white]不能对表进行[color=white] [color=white]插入[color=white]/[color=white]更新[color=white]/[color=white]删除等操作[color=white]. INITIALLY IMMEDIATE 初始化立即执行--在[color=#C00000]每条语句执行结束时检验约束INITALLY DEFERRED 初始化延迟执行,一直等到[color=#C00000]事务完成后(或者调用 set constraint immediate 语句时)才检验约束注意,你也可以对一个约束使用该命令,你不必让所有可延迟的约束都变为延迟执行的:[color=white]SQL>setconstraints all deferred; 或者[color=white] SQL> set constraints allimmediate;延迟约束有哪些实际用处呢? 有很多。[color=#C00000]它主要用于物化视图(快照)。这些视图会使用[color=#C00000]延迟约束来进行视图刷新。在刷新物化视图的过程中,可能会破坏完整性,而且将不能逐句检验约束。但到执行[color=#C00000] COMMIT 时,数据完整性就没问题了,而且[color=#C00000]能满足约束。没有延迟约束,物化视图的约束可能会使刷新过程不能成功进行。使用延迟约束的另一个普遍原因是,当预测是否需要[color=#C00000]更新父[color=#C00000]/[color=#C00000]子关系中的主键时,它有助于[color=#C00000]级联更新。 如果你将外键设为可延迟、但初始化为立即执行,那么你就可以将所有约束设置为可延迟。将父键更新为一个新值--至此子关系的完整性约束不会被验证。将子外键更新为这个新值。COMMIT--只要所有受更新影响的子记录都指向现有的父记录,这条命令就能成功执行。