问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Oracle约束延迟问题

发布网友 发布时间:2022-05-07 01:09

我来回答

3个回答

懂视网 时间:2022-05-07 05:30

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 标准规定,约束可以是deferrable或not deferrable(默认)。 not deferrable 约束在每一个DML语句后检查; deferrable 约束可以在每一个insert,delete,或update(即时模式)后立即检查,或者在事

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

标准规定,约束可以是deferrable或not deferrable(默认)。

not deferrable 约束在每一个DML语句后检查;

deferrable 约束可以在每一个insert,delete,或update(即时模式)后立即检查,或者在事务末尾检查(延迟模式)

当没有按特定顺序执行数据加载时,这项功能特别有用――它允许先把数据载入子表,然后再装入父表。

另一种用法是在加载不符合某个check约束的数据之后,对其进行适当的更新。

语法如下:

[ [not] deferrable [initially {immediate | deferred} ] ]

[ [initially {immediate | deferred} ] [not] deferrable ]

1 deferrable介绍

1.1 deferrable的两个选项区别

deferrable表示该约束是可延迟验证的。 它有两个选项:

Initially immediate(默认): 立即验证, 执行完一个sql后就进行验证;

Initially deferred: 延迟验证, 当事务提交时或调用set constraint[s] immediate语句时才验证。

区别是: 事务提交时验证不通过, 则立即回滚事务; set constraint[s] immediate时只验证, 不回滚事务。

1.2 not deferrable与deferrable区别

区别就在于: “立即验证的可延迟约束” 是可以根据需要设置成 “延迟验证的可延迟约束”的, 而“不可延迟验证”是不能改变的。

2 deferrable实例

2.1 建表

create table test1(a number(1) constraint check_a check(a > 0) deferrable

initially immediate,

b number(1) constraint check_b check(b > 0) deferrable

initially deferred);

2.2 正常插入,没问题

SQL> insert into test1 values(1, 1);

1 row inserted

2.3 检验立即验证:数据不能插入

SQL> insert into test1 values(-1, 1);

insert into test1 values(-1, 1)

ORA-02290: 违反检查约束条件 (MYHR.CHECK_A)

2.4 检验延迟验证:可以执行

SQL> insert into test1 values(1, -1);

1 row inserted

SQL> select * from test1;

A B

-- --

1 1

1 -1

2.5 提交延迟验证(commit):验证失败,自动回滚

SQL> commit;

commit

ORA-02091: 事务处理已回退

ORA-02290: 违反检查约束条件 (MYHR.CHECK_B)

2.6 提交延迟验证(set constraint immediate):验证失败,不回滚

SQL> insert into test1 values(1, -1);

1 row inserted

SQL> set constraint check_b immediate;

set constraint check_b immediate

ORA-02290: 违反检查约束条件 (MYHR.CHECK_B)

或者将所有的约束做修改: alter session set constraints = immediate;

或者:set constraints all immediate;

2.7 将延迟验证设置为立即验证:则在插入时出错

SQL> set constraint check_b immediate;

Constraints set

SQL> insert into test1 values(1,-1);

insert into test1 values(1,-1)

ORA-02290: 违反检查约束条件 (MYHR.CHECK_B)

[1] [2]

热心网友 时间:2022-05-07 02:38

oracle中是不能修改任何非延迟性约束的延迟状态的。

热心网友 时间:2022-05-07 03:56

因为你的语句用错了。你可以试一下,
alter table disable constraint pri_aa;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 为什么抖音收藏的音乐少一截 老人在突然发生肺栓塞后立即进行抢救,抢救成功的概率是多少?多长时间内抢救能使其生还? 下肢深静脉血栓形成晚期能活多久 得了肺栓塞,还有心衰最多能活多久 得了肺栓塞,还有心衰最多能活多久? 得白塞病能活多久? 如果血栓不治还能活多久? 得了肺栓塞能活多久久 肺栓塞后能活多久 男人容易对女同事产生好感吗? 对一个公司同事有好感,苦于没有机会接触 对女同事有好感说明什么 在单位里,男人对女同事有好感,女人能感觉出来吗 对一个男同事有好感,想加微信,但是又怕对方觉得自己很刻意,我该加吗? 我对一个同事有好感,今天下班的时候我看了眼她,她也没看我,我就直接走了,是不是不太好? 我对新来的一个同事有好感,开始觉得他对我很好很开心,后来才发现他对每个人都很好我不知道他会喜欢我吗 结婚了对异性同事有好感或者暗恋,但没交集,这正常吗? 同事之间真的会互相有好感吗 我已经有了男朋友,在一起2年了。感情一直很好。可最近我发现自己对一个同事有好感。这是为什么? 会对旁人有莫名的好感,这是正常的还是异常的? 最新版10586 windows10专业版 激活工具 南宁市高新区小学编制教师工资待遇怎么样 什么情况下参加广西教师招聘考试可以免笔试呢? 南宁中小学的招聘信息哪里有? 2015年南宁市中小学教师招聘考试内容包括哪些? 202l年广西各县还招聘中小学教师吗? 2015南宁市中小学教师招聘考试需要注意什么? 广西中小学教师都安面试资格审查 87版酒鬼酒的档次在白酒中属于怎样的? 水井坊和酒鬼酒哪个档次高点啊? 建行信用卡多还款怎么办 建设银行信用卡本月不小心多还了一期怎么办 我有建设银行信用卡还款多还了五万多怎么办 建行信用卡多还款了怎么办呢 药物用法指的是什么, 用量指的是什么, 区别何在,请举例说明! 用法与用量? 建行信用卡还款多了,可以取出吗,本来是要还1000的,结果多还了500块 w7怎么卸载office2007 建行信用卡每个月都多还款怎么办?那些钱是可以扣下个月的还款吗? 药品说明书上说的用法用量:一天3次、一天4次