Oracle11g温习-第十四章:约束( constraint )
2013年4月27日 星期六
10:48
|
1、约束的功能 |
|
|
通过一些强制性商业规则,保证数据的完整性、一致性 |
|
|
2、约束的类别 |
|
|
1 ) not null 不允许为空 2 ) check 数值类要求 约束该列的值必须满足某种要求 3 ) unique 唯一 4 ) primary key ( not null + unique ) 非空 唯一 只能有一个主键 唯一标示一行记录 5 ) foreign key ( reference ) 外键 |
|
|
【当进行dml操作的时候会检查当前约束是延迟还是非延迟的 如果是可延迟的约束只有提交的时候才会检查约束】
3、约束的状态 |
|
|
1 ) enable validate( 默认 ) :【约束会立刻生效,并且 新 旧数据都要符合约束】 SCOTT @ prod > alter table emp1 enable validate constraint pk_emp1; alter table emp1 * ERROR at line 1: ORA-02437: cannot validate ( SCOTT.PK_EMP1 ) - primary key violated -----新旧记录都必须符合约束 2 ) enable novalidate :【约束会立刻生效,只检查新的数据,已经存在的数据可以不符合约束( 注意对primary key 和unique,必须先建立非唯一性索引 )】 SCOTT @ prod > create table emp1 as select * from emp; Table created. SCOTT @ prod > select * from emp1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 SCOTT @ prod > update emp1 set empno=7788 where ename='KING'; 1 row updated. SCOTT @ prod > select * from emp1 WHERE EMPNO=7788; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7788 KING PRESIDENT 17-NOV-81 5000 10
3 ) disable validate: 约束失效,但不能做DML操作 4 ) disable novalidate:约束失效,不检查任何数据( 等同于禁用约束 ) |
|
|
4、修正约束( 将违背约束的记录插入到exceptions表里 ) |
|
|
1 ) SCOTT @ prod > @?/rdbms/admin/utlexpt1.sql SQL> Rem SQL> Rem $Header: utlexpt1.sql 24-jun-99.07:59:18 echong Exp $ 11:47:09 SQL> Rem 11:47:09 SQL> Rem utlexpt1.sql 11:47:09 SQL> Rem 11:47:09 SQL> Rem Copyright ( c ) Oracle Corporation 1998, 1999. All Rights Reserved. 11:47:09 SQL> Rem 11:47:09 SQL> Rem NAME 11:47:09 SQL> Rem utlexpt1.sql - <one-line expansion of the name> 11:47:09 SQL> Rem 11:47:09 SQL> Rem DESCRIPTION 11:47:09 SQL> Rem <short description of component this file declares/defines> 11:47:09 SQL> Rem 11:47:09 SQL> Rem NOTES 11:47:09 SQL> Rem <other useful comments, qualifications, etc.> 11:47:09 SQL> Rem 11:47:09 SQL> Rem MODIFIED ( MM/DD/YY ) 11:47:09 SQL> Rem echong 06/24/99 - rename 11:47:09 SQL> Rem echong 06/05/98 - exceptions table with urowid type 11:47:09 SQL> Rem echong 06/05/98 - Created 11:47:09 SQL> Rem 11:47:09 SQL> 11:47:09 SQL> create table exceptions( row_id urowid, 11:47:09 2 owner varchar2( 30 ), 11:47:09 3 table_name varchar2( 30 ), 11:47:09 4 constraint varchar2( 30 ) ); Table created. EXCEPTIONS SCOTT @ prod > select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- DEPT TABLE EMP TABLE BONUS TABLE SALGRADE TABLE ADMIN_EXT_EMPLOYEES TABLE EMPLOYEES TABLE TEST TABLE EMP1 TABLE EXCEPTIONS TABLE 9 rows selected. SCOTT @ prod > alter table emp1 enable validate constraint pk_emp1 exceptions into exceptions; 【把违背约束的数据插入expections 表 】 alter table emp1 * ERROR at line 1: ORA-02437: cannot validate ( SCOTT.PK_EMP1 ) - primary key violated ---------把违背约束的记录插入到exceptions 表里 SCOTT @ prod > select * from exceptions; ROW_ID OWNER TABLE_NAME CONSTRAINT ------------------------------ -------------------- ------------------------------ ------------------------------ AAAM0/AAEAAAAGcAAI SCOTT EMP1 PK_EMP1 AAAM0/AAEAAAAGcAAH SCOTT EMP1 PK_EMP1 SCOTT @ prod > delete from emp1 where rowid in ( select row_id from exceptions ); 2 rows deleted. SCOTT @ prod >alter table emp1 enable validate constraint pk_emp1; Table altered. |
|
|
5、延迟性约束deferrable( 约束只在提交事务时检查 ) 并且回滚事务 |
|
SCOTT @ prod > select * from emp1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 12 rows selected. SCOTT @ prod > select * from dept1; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON SCOTT @ prod > update emp1 set deptno=50 where empno=7900; 1 row updated. SCOTT @ prod > commit; commit * ERROR at line 1: 【ORA-02091: transaction rolled back ORA-02291: integrity constraint ( SCOTT.FK_EMP1 ) violated - parent key not found】 SCOTT @ prod > select * from emp1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 12 rows selected. ——【插入记录只在提交( commit ) 时检查】 |
|
|
Alter table emp modify ( empno varchar2(6) not null ) 非空约束 |
|
|
Alter table emp add constraint constraint_name unique ( empno ) 唯一约束 |
|
|
Alter table emp add constraint constraint_name check ( sal >5000 ); |
|
|
Dba_column_contents ; dba_constraints; |
|
|
添加主键 或是 唯一约束的时候 必须添加 索引 |
Oracle11g温习-第十四章:约束( constraint )的更多相关文章
- Oracle11g温习-第十二章:tables
2013年4月27日 星期六 10:44 1.表的功能 存储.管理数据的基本单元(二维表:由行和列组成) 2.表的类型 1)普通表:[heap table(堆表) :数据存储时,无序的,对它的访问采 ...
- Oracle11g温习-第十九章:审计(audit)
2013年4月27日 星期六 10:52 1.审计的功能:监控用户在database 的 action (操作) 2.审计分类 1) session :在同一个session,相同的语句只产生一个审计 ...
- Oracle11g温习-第十六章:用户管理
2013年4月27日 星期六 10:50 1.概念 (1)schema : user.object 就是用户创建的对象 (2)用户认证方式: ...
- JavaScript高级程序设计:第十四章
第十四章 一.表单的基础知识 在HTML中,表单是由<form>元素来表示的,而在javascript中,表单对应的则是HTMLFormElement类型.HTMLFormElement继 ...
- C++ Primer Plus学习:第十四章
第十四章 C++中的代码重用 包含对象成员的类 将类的对象作为新类的成员.称为has-a关系.使用公有继承的时候,类可以继承接口,可能还有实现(纯虚函数不提供实现,只提供接口).使用包含时,可以获得实 ...
- 《Linux命令行与shell脚本编程大全》 第十四章 学习笔记
第十四章:呈现数据 理解输入与输出 标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 1.STDIN 代表标准输入.对于终端界面 ...
- perl 第十四章 Perl5的包和模块
第十四章 Perl5的包和模块 by flamephoenix 一.require函数 1.require函数和子程序库 2.用require指定Perl版本二.包 1.包的定义 2.在包间切 ...
- Gradle 1.12 翻译——第十四章. 教程 - 杂七杂八
有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...
- C和指针 (pointers on C)——第十四章:预处理器
第十四章 预处理器 我跳过了先进的指针主题的章节. 太多的技巧,太学科不适合今天的我.但我真的读,读懂.假设谁读了私下能够交流一下.有的小技巧还是非常有意思. 预处理器这一章的内容.大家肯定都用过.什 ...
随机推荐
- 用yarn代替cnpm,cnpm漏包有点严重
npm 的方式 npm install -g yarn 安装完成后,你可以测试下自己的版本 yarn --version 开始使用 单独安装包的方式add 不是install,后面不用加 ...
- [转载]error while loading shared libraries的解決方法
转自:https://blog.csdn.net/dumeifang/article/details/2963223 error while loading shared libraries的解決方法 ...
- C语言 分割字符串
对指针的操作有点迷糊 只好采用下面一些比较low的手段 char str[100]; char delims[] = ";"; char *result = NULL; sprin ...
- sed命令使用详解
内容来自马哥视频,感谢马哥精彩讲解 sed:编辑器 sed: Stream EDitor, 行编辑器,逐行进行处理 grep:实现文本过滤 awk:文本报告生成器 sed默认不编辑源文件,而是 ...
- sprinf sprintf_s 的用法
函数功能: 将数据格式化输出到字符串 函数原型: int sprintf( char *buffer, const char *format [,argument] ... ) 注意这里的buffer ...
- 详解JS中DOM 元素的 attribute 和 property 属性
一.'表亲戚':attribute和property 为什么称attribute和property为'表亲戚'呢?因为他们既有共同处,也有不同点. attribute 是 dom 元素在文档中作为 h ...
- java进程占用系统内存高,排查解决
转自:http://blog.51cto.com/chengxiaobai/2052530?cid=695076 故障:最近收到生产服务器的报警短信以及邮件,报警内容为:内存使用率高于70%. 使用t ...
- 自定义 Git - 配置 Git
用git config配置 Git,要做的第一件事就是设置名字和邮箱地址: $ git config --global user.name "John Doe" $ git con ...
- Ajax_请求get,post案例
1. 最原始的ajax请求方式 (1). get请求 <%@ Page Language="C#" AutoEventWireup="true" Code ...
- java 常用异常及作用
先看看图, Exception就明白了 关于异常 大体分为 不可查异常 可查异常 runtimeException三类~异常都继承throwable这个类~ 下面有error和Exception两大类 ...