《数据库中的约束.ppt》由会员分享,可在线阅读,更多相关《数据库中的约束.ppt(27页珍藏版)》请在三一办公上搜索。
1、十一.数据库中的约束(Constraint),目标,结束本节课后,应当能达到如下目标:描述什么是约束创建和维护约束,什么是约束?,约束定义了表级的强制规则.约束定义了数据的完整性,.在Oracle中,有下列的强制类型:NOT NULL非空约束UNIQUE 唯一约束PRIMARY KEY主键约束FOREIGN KEY外键约束CHECK定义一般性约束,约束,可以为一个约束命名,Oracle服务器也可以自动为约束命名.约束的创建:当创建表时创建约束在表创建后仍然可以创建约束定义一个列级或者表级的约束.查看数据字典中的约束.,定义一个约束,定义一个约束,列级约束表级约束,column CONSTRAI
2、NT constraint_name constraint_type,column,.CONSTRAINT constraint_name constraint_type(column,.),NOT NULL约束,保证表中的某些列不出现空值,EMP,EMPNO ENAME JOB.COMM DEPTNO 7839KINGPRESIDENT 10 7698BLAKEMANAGER 30 7782CLARKMANAGER 10 7566JONESMANAGER 20.,NOT NULL 约束,定义列级约束,SQL CREATE TABLE emp(2 empno NUMBER(4),3enameV
3、ARCHAR2(10)NOT NULL,4jobVARCHAR2(9),5mgrNUMBER(4),6hiredateDATE,7salNUMBER(7,2),8 commNUMBER(7,2),9deptnoNUMBER(7,2)NOT NULL);,唯一键值约束,DEPT,DEPTNO DNAME LOC-10ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON,唯一键值约束,唯一键值约束,在表级或者列级进行定义,主键约束,DEPT,DEPTNO DNAME LOC-10ACCOUNTINGNEW YOR
4、K 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON,主键,主键约束,在表级或者列级进行定义,SQL CREATE TABLE dept(2 deptno NUMBER(2),3dname VARCHAR2(14),4loc VARCHAR2(13),5CONSTRAINT dept_dname_uk UNIQUE(dname),6CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno);,外键约束,DEPT,DEPTNO DNAME LOC-10ACCOUNTINGNEW YORK 20RESEARCHDA
5、LLAS.,主键,EMP,EMPNO ENAME JOB.COMM DEPTNO 7839KINGPRESIDENT 10 7698BLAKEMANAGER 30.,外键,外键约束,要么在表级要么在列级做出定义,SQL CREATE TABLE emp(2 empno NUMBER(4),3enameVARCHAR2(10)NOT NULL,4jobVARCHAR2(9),5mgrNUMBER(4),6hiredateDATE,7salNUMBER(7,2),8 commNUMBER(7,2),9deptnoNUMBER(7,2)NOT NULL,10CONSTRAINT emp_deptno
6、_fk FOREIGN KEY(deptno)11REFERENCES dept(deptno);,外键约束关键字,FOREIGN KEY:定义子表中的列为外键。REFERENCES:标记外键所要参考的父表和列ON DELETE CASCADE:允许在删除父表的列的同时,删除子表的列。,CHECK 约束,定义每一列所要满足的条件在CHECK约束中不允许的表达式:参考 CURRVAL,NEXTVAL,LEVEL,和 ROWNUM这样的伪列调用 SYSDATE,UID,USER,和 USERENV函数参考其它列值的查询,.,deptnoNUMBER(2),CONSTRAINT emp_deptno
7、_ck CHECK(DEPTNO BETWEEN 10 AND 99),.,增加一个约束,可以增加、删除一个约束。但不能更改一个约束。指定一个约束是有效还是无效。可以用MODIFY 子句为一个表的列增加NOT NULL约束。,ALTER TABLE table ADD CONSTRAINT constraint type(column);,增加一个约束,为 EMP表增加一个外键约束,指定一个管理员必须已经作为一个职员,存在于 EMP 表中.,SQL ALTER TABLE emp 2 ADD CONSTRAINT emp_mgr_fk 3 FOREIGN KEY(mgr)REFERENCES
8、emp(empno);Table altered.,丢弃一个约束,从 EMP 表中移除约束.,SQL ALTER TABLE emp 2 DROP CONSTRAINT emp_mgr_fk;Table altered.,移除 DEPT表上的主键约束,因为有CASCADE选项,所以同时删除了在EMP.DEPTNO 列上的外键约束.,SQL ALTER TABLEdept 2 DROP PRIMARY KEY CASCADE;Table altered.,使约束失效,执行 ALTER TABLE 语句中的DISABLEz子句可以使约束失效.使用 CASCADE 选项可以同时使有依赖关系选项失效.
9、,SQL ALTER TABLEemp 2 DISABLE CONSTRAINTemp_empno_pk CASCADE;Table altered.,使约束生效,可以使用 ENABLE 子句来激活一个失效的约束.一个唯一索引,或者主键索引在激活唯一键或主键时自动产生.,SQL ALTER TABLEemp 2 ENABLE CONSTRAINTemp_empno_pk;Table altered.,级联约束,CASCADE CONSTRAINTS 子句是随同DROP COLUMN子句一起使用的.CASCADE CONSTRAINTS 将丢弃在删除列上的唯一键或主键约束.,总结,在Oracle中,可以创建下列类型的约束:NOT NULLUNIQUEPRIMARY KEYFOREIGN KEYCHECK,作业概览,往已经存在的表中增加约束往一个表中增加更多的列在数据字典视图中浏览信息,