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)——第十四章:预处理器
第十四章 预处理器 我跳过了先进的指针主题的章节. 太多的技巧,太学科不适合今天的我.但我真的读,读懂.假设谁读了私下能够交流一下.有的小技巧还是非常有意思. 预处理器这一章的内容.大家肯定都用过.什 ...
随机推荐
- 怎么在父窗口调用它页面的iframe里面数据,进行操作?
注:在服务器下操作有效果,本地无效 document.getElementById("taskdetail1").contentWindow.test(a) document.ge ...
- 【ASP.Net】 http请求中get,put,post,delete的区别与使用总结
在web api的设计上, 需要设计这个每个action对应的资源的请求方法是什么. Get方法是对服务器资源的请求获取, 一般get方法的参数都放在URL当中的. 所以通常情况下这种请求方式都是不安 ...
- ARM MOV PC加8
缘由 今天在分析ARM伪指令ADR,书上说ADR通常会被一条ADD或SUB指令替代实现相同功能.我反汇编了一下确实如此会基于PC相对偏移的地址量读取到寄存器中,可是计算却发现对不上 如上图所示,ADR ...
- js旋转V字俄罗斯方块
实现效果如图,也就是一个图像的旋转.注意,旋转后的文字是相对应的,而且文字还是立起的.第一次点击时显示,第二次点击时开始旋转.下面是我做这个效果的记录,方法这么差,我也就不说什么了. 先上HTML/C ...
- R的极客理想系列文章--转载
http://blog.fens.me/series-r/ R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在 ...
- JAVA读取CSV文件到MySQL数据库中
maven项目pom配置: <dependency> <groupId>net.sourceforge.javacsv</groupId> <artifact ...
- Addition Chains
题目描述: 一个与 n 有关的整数加成序列 < a0 , a1 , a2 ...am> 满足一下四个条件: 1.a0=1 2.am=n 3.a0<a1<a2<...< ...
- Oracle(转换函数)
在数据库中主要使用数据类型:字符,数字,日期(时间戳),所以这三种数据类型之间需要实现转换操作. 常用转换函数: 3.1.TO_CHAR()函数 将数据类型变为字符串. 日期格式化标记: 在TO_CH ...
- Oracle简单语句查询
语法3-1:简单查询语句语法 SELECT [DISTINCT] * |列名称[AS][列别名],列名称[AS][列别名],...FROM 表名称[表别名]; 在整个简单查询之中,主要有两个子句完成: ...
- vue中的slot插槽
插槽,也就是slot,是组件的一块HTML模板,这块模板显示不显示.以及怎样显示由父组件来决定. 实际上,一个slot最核心的两个问题这里就点出来了,是显示不显示和怎样显示. 1.navigation ...