什么是约束?约束是表级强制执行的规则,当表中数据有相互依赖性时,可保护数据不被删除。
Oracle 有如下类型的约束:
NOTNULL
UNIQUEKey
PRIMARYKEY
FOREIGNKEY
CHECK
Oracle使用SYS_Cn格式命名约束.
创建约束:
在建表的同时创建
建表后创建
可定义列级或表级约束.
可通过数据字典表查看约束.
建表时创建约束
createtableOTL_NICOTINE_GRADE(IDNUMBERnotnull,SEASON_NONUMBER(4)notnull,RECEIPT_NONUMBER(8)notnull,
GRADEVARCHAR2(10)notnull,PROPORTIONNUMBER(5,2)notnull,WEIGHTNUMBER(10,2)notnull,VALUENUMBER(12,2)not
null,constraintPK_OTL_NICOTINE_GRADEprimarykey(ID,GRADE),constraintFK_OTL_NICO_REFERENCE_OTL_CHECforeign
key(ID)referencesOTL_CHECK_CHEM(ID))
建表后添加约束
ALTERTABLE(table_name)ADD(CONSTRAINT(foreignkeyconstraintname)FOREIGNKEY(fieldname)REFERENCES
primary_table_name(primary_table_primary_index_field)
SQL>createtableemplyees(
2employee_idnumber(6),
3last_namevarchar2(25)notnull,
4salarynumber(8,2),
5commission_pctnumber(2,2),
6hire_datedate,
7constraintemp_hire_date_1notnull,
8CONSTRAINTdept_dname_ukUNIQUE(emp_name)
9);
表已创建。
SQL>
1selectconstraint_name,table_name
2fromdba_constraints
3wheretable_name='EMPLYEES'
CONSTRAINT_NAMETABLE_NAME
------------------------------------------------------------
SYS_C003012EMPLYEES
EMP_HIRE_DATE_1EMPLYEES
定义主键约束PRIMARY KEY 1 2 3 4 : 什么是约束?约束是表级强制执行的规则,当表中数据有相互依赖性时,可保护数据不被删除。本文详细介绍了Oracle中约束,包括在建表的同时创建,建表后创建,可定义列级或表级约束,可通过数据字典表查看约束。 可通过数据字典表查看约束.
SQL>CREATETABLEdept(
2deptnoNUMBER(2),
3dnameVARCHAR2(14),
4locVARCHAR2(13),
5CONSTRAINTdept_dname_ukUNIQUE(dname),
6CONSTRAINTdept_deptno_pkPRIMARYKEY(deptno));
外键约束FOREIGN KEY
SQL>CREATETABLEemp(
2empnoNUMBER(4),
3enameVARCHAR2(10)NOTNULL,
4jobVARCHAR2(9),
5mgrNUMBER(4),
6hiredateDATE,
7salNUMBER(7,2),
8commNUMBER(7,2),
9deptnoNUMBER(7,2)NOTNULL,
10CONSTRAINTemp_deptno_fkFOREIGNKEY(deptno)
11REFERENCESdept(deptno));
外键约束的关键字
FOREIGN KEY
定义子表的哪一列作为外键约束
REFERENCES
指示主表和参照的列
ON DELETE CASCADE
删除主表记录时将子表相关记录删除
ON DELETE SET NULL
将外键引用置为空值
CHECK 约束
定义每一记录都要满足的条件
条件表达式不允许有:
CURRVAL, NEXTVAL, LEVEL, ROWNUM 9 1 2 3 4 : 什么是约束?约束是表级强制执行的规则,当表中数据有相互依赖性时,可保护数据不被删除。本文详细介绍了Oracle中约束,包括在建表的同时创建,建表后创建,可定义列级或表级约束,可通过数据字典表查看约束。 可通过数据字典表查看约束.
SYSDATE, UID, USER, USERENV 函数
参照其他记录的值
..., deptno NUMBER(2),
CONSTRAINT emp_deptno_ck
CHECK (DEPTNO BETWEEN 10 AND 99),...
加约束
ALTER TABLE table
ADD [CONSTRAINT constraint] type (column);
可加或删除约束,但不能修改
可使约束生效和失效
使用MODIFY子句可加 NOT NULL约束
加 FOREIGN KEY 约束到EMP表
SQL>ALTERTABLEemp
2ADDCONSTRAINTemp_mgr_fk
3FOREIGNKEY(mgr)REFERENCESemp(empno);
删除约束
删除约束emp_mgr_fk
SQL>ALTERTABLEemp
2DROPCONSTRAINTemp_mgr_fk;
删除主键约束和相关的外键约束
SQL>ALTERTABLEdept
2DROPPRIMARYKEYCASCADE;
使约束失效 9 1 2 3 4 : 什么是约束?约束是表级强制执行的规则,当表中数据有相互依赖性时,可保护数据不被删除。本文详细介绍了Oracle中约束,包括在建表的同时创建,建表后创建,可定义列级或表级约束,可通过数据字典表查看约束。 可通过数据字典表查看约束.
在ALTER TABLE 语句中执行DISABLE子句可使完整性约束失效
使用 CASCADE 选项可使依赖的完整约束失效
SQL>ALTERTABLEemp
2DISABLECONSTRAINTemp_empno_pkCASCADE;
使用ENABLE子句将失效的约束生效
SQL>ALTERTABLEemp
2ENABLECONSTRAINTemp_empno_pk;
当使UNIQUE 或 PRIMARY KEY约束生效时,会自动创建 UNIQUE 或PRIMARY KEY 索引.







评论列表