Welcome 微信登录

首页 / 数据库 / MySQL / Oracle可延迟约束Deferable的使用

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 inserted2.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 insertedSQL> select * from test1; A  B-- -- 1  1 1 -12.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 insertedSQL> set constraint check_b immediate;set constraint check_b immediateORA-02290: 违反检查约束条件 (MYHR.CHECK_B)或者将所有的约束做修改: alter session set constraints = immediate;2.7 将延迟验证设置为立即验证:则在插入时出错SQL> set constraint check_b immediate;Constraints setSQL> insert into test1 values(1,-1);insert into test1 values(1,-1)ORA-02290: 违反检查约束条件 (MYHR.CHECK_B)
  • 1
  • 2
  • 下一页
Oracle约束支持3种Delete的行为Oracle创建删除的外键脚本相关资讯      Oracle数据库  Oracle入门教程  oracle数据库教程 
  • Oracle数据库全球化  (03月01日)
  • Oracle数据库日期过滤方法性能比较  (02/02/2015 13:20:26)
  • Oracle数据库安装中端口被占用问题  (10/29/2014 07:42:24)
  • 在CentOS 6.6上搭建C++运行环境并  (10/10/2015 19:44:40)
  • Oracle数据库无法使用localhost和  (11/14/2014 16:39:10)
  • 使用SQLT来构建Oracle测试用例  (08/28/2014 06:17:41)
本文评论 查看全部评论 (0)
表情: 姓名: 字数