`

oracle可延迟约束

阅读更多

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

 

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

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

 

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

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

 

语法如下:

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

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

 

参考例子:

CREATE TABLE salesman
(
salesman_id_n NUMBER NOT NULL,
salesman_code_s VARCHAR2(2) NOT NULL,
salesman_name_s VARCHAR2(50) NOT NULL,
salesman_status_s CHAR(1) DEFAULT 'Y',
CONSTRAINT chk_salesstatus CHECK (salesman_status_s in ('N', 'Y'))
DEFERRABLE INITIALLY DEFERRED,
CONSTRAINT pk_salesmanprim PRIMARY KEY (salesman_id_n)
);

CREATE TABLE address
(
addr_id_n NUMBER CONSTRAINT pk_addrprimary PRIMARY KEY,
addr_custid_fn NUMBER,
addr_salesmanid_fn NUMBER CONSTRAINT fk_addr_salesman
REFERENCES salesman (salesman_id_n)
ON DELETE CASCADE,
addr_address_s VARCHAR2(60),
addr_type_s VARCHAR2(8) CONSTRAINT chk_addr_type CHECK
(addr_type_s IN ('BILLING', 'SHIPPING')),
addr_city_s VARCHAR2(18) CONSTRAINT nn_addr_city NOT NULL,
addr_state_s CHAR(2),
addr_zip_s VARCHAR2(10) NOT NULL,
addr_country_s CHAR(3)
);

INSERT INTO salesman
(
salesman_id_n,
salesman_code_s,
salesman_name_s,
salesman_status_s
)
VALUES
(23,'02','FAIRFIELD BUGS ASSOCIATION','A');

UPDATE salesman
SET salesman_status_s = 'Y'
WHERE salesman_status_s = 'A';

COMMIT;

 

分享到:
评论

相关推荐

    Oracle PL/SQL语言初级教程

    延迟约束检验(Deferred Constraint Checking) 54 序列(Sequences) 54 索引(INDEXES) 55 6.Oracle数据库数据对象分析(下) 56 过程和函数 56 包 58 数据字典 60 7.Oracle数据操作和控制语言详解 62 插入数据 63 ...

    Oracle自学(学习)材料 (共18章 偏理论一点)

    13 维护数据的完整性 目标 13-2 数据的完整性 13-3 约束的类型 13-4 约束的状态 13-5 约束的检测 13-7 定义即时约束或延迟约束 13-8 强制主键和唯一键 13-9 外部关键字的考虑 13-10 在建表时定义完整性约束 13-11 ...

    Oracle Database 11g初学者指南--详细书签版

    4.14 约束:与实体模型的联系、类型、延迟 114 4.14.1 与实体模型的联系 115 4.14.2 类型 115 4.14.3 延迟 116 4.15 用SQL*Plus进行格式化输出 116 4.15.1 页和行大小 116 4.15.2 页标题 116 4.15.3 页脚 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    说明:用于连接到oracle数据库,也可实现用户的切换 用法:conn 用户名/密码 [as sysdba/sysoper] 注意:当用特权用户连接时,必须带上sysdba或sysoper 例子: 3. 断开连接(disc) 说明:断开与当前数据库的连接 ...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    4.14 约束:与实体模型的联系、类型、延迟 4.14.1 与实体模型的联系 4.14.2 类型 4.14.3 延迟 4.15 用SQL*Plus进行格式化输出 4.15.1 页和行大小 4.15.2 页标题 4.15.3 页脚 4.15.4 格式化列 4.15.5 将SQL*Plus输出...

    基于SSM框架实现的高并发商品秒杀系统.zip

    c3p0作为连接池,Redis为缓存实现高并发 ,同时通过MySQL优化降低了网络延迟与GC的影响.DAO,SERVICE等逻辑代码均有JUnit单元测试 后台API采用RESTful设计风格,基于Maven构建 MySQL 是一款广受欢迎的开源关系型数据库...

    vita:VITA应用程序框架

    它支持多个数据库服务器:Microsoft SQL Server,MySql,PostgreSQL,Oracle,SQLite。 它提供了完整的LINQ支持,复杂的数据模型,一对多和多对多关系,延迟加载,批量事务更新以及现代功能齐全的ORM所期望的许多...

    Hibernate注解

    * unique 可选,是否在该列上设置唯一约束(默认值false) * nullable 可选,是否设置该列的值可以为空(默认值false) * insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true) * updatable 可选...

    javaSE代码实例

    11.3.4 方法重写对抛出异常声明的约束 210 11.4 定义自己的异常 212 11.4.1 创建自己的异常类 212 11.4.2 使用自定义的异常类 213 11.4.3 显性再抛出作用的体现 215 11.5 异常的匹配 217 11.5.1 同时...

Global site tag (gtag.js) - Google Analytics