惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threat Research - Cisco Blogs
A
Arctic Wolf
S
Securelist
O
OpenAI News
T
Threatpost
Forbes - Security
Forbes - Security
N
News and Events Feed by Topic
S
Secure Thoughts
H
Heimdal Security Blog
S
Security Affairs
P
Privacy International News Feed
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
Cyberwarzone
Cyberwarzone
N
News and Events Feed by Topic
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Palo Alto Networks Blog
S
Security @ Cisco Blogs
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
T
Tailwind CSS Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hacker News: Ask HN
Hacker News: Ask HN
T
Troy Hunt's Blog
S
SegmentFault 最新的问题
腾讯CDC
V
Visual Studio Blog
Last Week in AI
Last Week in AI
H
Hacker News: Front Page
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Project Zero
Project Zero
WordPress大学
WordPress大学
NISL@THU
NISL@THU
博客园 - 【当耐特】
博客园 - Franky
Webroot Blog
Webroot Blog
博客园_首页
T
Tenable Blog
雷峰网
雷峰网
Google Online Security Blog
Google Online Security Blog
阮一峰的网络日志
阮一峰的网络日志
V2EX - 技术
V2EX - 技术
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
Lohrmann on Cybersecurity
The Hacker News
The Hacker News

博客园 - .net学习交流

Oracle profile详解 ORACLE使用JOB定时备份数据库 干掉标记为KILLED的session Oracle直方图详解(转) Export/Import DataPump Parameter QUERY - How to Specify a Query 一个完整的RMAN备份脚本 Oracle 10g的新特性flashback IBM AIX V5.3 磁盘存储管理 跨平台表空间传输(摘自eygle《循序渐进Oracle》) ORACLE EXP/IMP的使用详解 RMAN命令详解 Oracle中使用可传输表空间备份数据 一致性读(Consistent Reads)与buffer cache Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据 oracle 游标属性 sql%found sql%notfound sql%rowcount 在存储过程中指定回滚段 EXP-00003: 未找到段 (11,419) 的存储定义解决方法 AIX上设置LOCK_SGA=TRUE 很容易理解的IN和EXISTS区别
定义可延迟(deferrable)的约束 - .net学习交流 - 博客园
.net学习交流 · 2009-06-28 · via 博客园 - .net学习交流

"定义为可延迟(deferrable)的约束可以指定为:

  1. initially immediate(初始化立即执行)或

  2. initially deferred(初始化延迟执行)。"

  我知道什么是延迟约束,但不明白什么叫"初始化立即执行的可延迟约束"和"初始化延迟执行的可延迟约束"。请解释二者的区别。还有,这些约束有什么用途?这是通常容易混淆的问题。我希望下面的例子能解释清楚。初始化立即执行/延迟执行规定了在默认情况下应该如何执行约束:

  初始化立即执行--在每条语句执行结束时检验约束

  初始化延迟执行--一直等到事务完成后(或者调用set constraint immediate语句时)才检验约束

  来看下面的代码:

  SQL> create table t

  2  ( x int constraint  check_x check ( x > 0 )

  deferrable

  initially immediate,

  3  y int constraint  check_y check ( y > 0 )

  deferrable

  initially deferred

  4  )

  5  /

  Table created.

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

  1 row created.

  SQL> commit;

  Commit complete.

  所以,当两个约束同时满足时才能正确无误地插入行。但是,如果我试图插入违反CHECK_X约束(初始化立即执行的约束)的行,则系统会立即检验约束,并得到下面的结果:

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

  insert into t values ( -1,1)

  *

  ERROR at line 1:

  ORA-02290: check constraint

  (OPS$TKYTE.CHECK_X) violated

  由于CHECK_X是可延迟但初始化为立即执行的约束,所以这一行立刻被拒绝了。而CHECK_Y则不同,它不仅是可延迟的,而且初始化为延迟执行,这就意味着直到我用COMMIT命令提交事务或将约束状态设置为立即执行时才检验约束。

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

  1 row created.

  现在它是成功的(总之到目前为止是成功的)。我将约束检验延迟到了执行COMMIT的时候:

  SQL> commit;

  commit

  *

  ERROR at line 1:

  ORA-02091: transaction rolled back

  ORA-02290: check constraint

  (OPS$TKYTE.CHECK_Y) violated

  此时数据库将事务回滚,因为违反约束导致了COMMIT语句的失败。这些语句说明了初始化立即执行与初始化延迟执行约束之间的区别。initially(初始化)部分指定Oracle什么时候会进行默认的约束检验--是在语句结束时[immediate(立即执行)],还是在事务结束时[deferred(延迟执行)]。我还要说明deferred(可延迟)子句有什么用。我可以发出命令,让所有可延迟的约束变为延迟执行的。注意,你也可以对一个约束使用该命令;你不必让所有可延迟的约束都变为延迟执行的:

  SQL> set constraints all deferred;

  Constraint set.

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

  1 row created.

  由于将初始化立即执行的约束设置为延迟执行的模式,这个语句似乎执行成功;但是,当我用COMMIT语句提交事务时,看一下会发生什么:

  SQL> commit;

  commit

  *

  ERROR at line 1:

  ORA-02091: transaction rolled back

  ORA-02290: check constraint

  (OPS$TKYTE.CHECK_X) violated

  事务提交失败并回滚,因为在COMMIT语句之后对约束进行了检验。相反,我可以将初始化为延迟执行的约束变为"立即"执行的约束:

  SQL> set constraints all immediate;

  Constraint set.

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

  insert into t values ( 1,-1)

  *

  ERROR at line 1:

  ORA-02290: check constraint

  (OPS$TKYTE.CHECK_Y) violated

  前面在我提交前能执行的语句现在立即出了问题。因为我手动修改了默认的约束模式。