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)——第十四章:预处理器
第十四章 预处理器 我跳过了先进的指针主题的章节. 太多的技巧,太学科不适合今天的我.但我真的读,读懂.假设谁读了私下能够交流一下.有的小技巧还是非常有意思. 预处理器这一章的内容.大家肯定都用过.什 ...
随机推荐
- 4-Five-Youth
①People are always talking about 'the problem of youth'. If there is one--which I take leave to do ...
- 《操作系统_FCFS和SJF》
先来先服务FCFS和短作业优先SJF进程调度 转自:https://blog.csdn.net/qq_34374664/article/details/73231072 一.概念介绍和案例解析 FCF ...
- windows下的安装及使用 python
出处 https://www.cnblogs.com/daysme/ - 2017-12-30 本文只讲在 vscode 中如何运行起 python - 2017-12-30 ## windows下的 ...
- oracle 与其他数据库如mysql的区别
想明白一个问题:(1)oracle是以数据库为中心,一个数据库就是一个域(可以看作是一个文件夹的概念),一个数据库可以有多个用户,创建用户是在登陆数据库之后进行的,但是有表空间的概念(2)而mysql ...
- springboot读取properties(yml)的几种常用方式
boot项目中一些秘钥等不常变动的信息大多存储在配置文件中,那么我们怎么获取配置文件中的属性呢? 以获取server端口号为例讲解几种方法:配置信息如下 一:使用@Value注解 @Value(&qu ...
- RN中关于IOS和Android的相关权限的问题
在日常的开发中,时常需要去获取应用的一权限 比如查看通讯录/打开摄像机等 1:ios iOS 的权限管理在info.plist里设置 info.plist主要是管理了app 的一些信息文件,比如版本 ...
- ECMAScript6语法重点(一)
一. let和const ①let声明的变量只在它的块作用域有效({ }括起来) ②let不能重复声明同一变量 ③const声明的常量不能改(但对象可以加属性) ④const也有块作用域概念 ⑤con ...
- _itemmod_currency_like
设置物品掉落模式为货币类型功能:掉落的时候 所有人都可以拿,就像公正徽章,每个人都会获得一个.小技巧:配合DBC使用,可以将该道具其显示在角色栏的货币中.1.转存item_template,在item ...
- codeforces 768E Game of Stones
题目链接:http://codeforces.com/problemset/problem/768/E NIM游戏改版:对于任意一堆,拿掉某个次数最多只能一次. 对于一堆石头数量为$X$.找到一个最小 ...
- Oracle(order by)
传统数据查询只会按照设置的主键排列.如果现在对制定的列进行排序的操作,那么就必须通过 ORDER BY 子句控制. 排序语法: SELECT [DISTINCT] * | 列名称 [AS] 列别名, ...