Chapter10 约束限制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OCP-007-Chapter10 约束限制

目的

完成本课,可以完成下列事情:

描述约束

创建和管理约束

约束在表一级实施强制的规则,可以防止误删除和误插入

有下列类型的约束:

NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK

所有的约束都保存在数据字典中。如果没有给约束起名,系统自己会起一个类似于SYS_C n的名字。可以从USER_CONTRAINS中查看已经定义的约束。

CREATE TABLE [schema.]table

(column datatype [DEFAULT expr]

[column_constraint],

...

[table_constraint][,...]);

列一级的约束:column [CONSTRAINT constraint_name] constraint_type

表一级的约束:

column,...

[CONSTRAINT constraint_name] constraint_type

(column, ...)

表一级不能定义NOT NULL约束

对于组合的唯一性约束,只能用于表一级

Oracle服务器隐式的创建了一个唯一性索引来保证UNIQUE约束

Primary Key可以在列一级和表一级定义,组合的Primary Key只能在表一级定义。一个表只能有一个Primary Key。当创建Primary Key约束时,一个唯一索引会自动在该列创建。

FOREIGN KEY(外键,也称为参照完整性约束),指定一列或者一个列的组合作为外键,和同一张表或者不同表中的primary key或者unique key建立关系。外键所在的表称为子表,所参考的表称为父表。在列一级定义外键时不出现foreign key字样。

外键的值必须在主键上已经存在,或者为NULL

外键是基于数据值的,纯粹是逻辑上的关系,不是物理的,也不是指针

CREATE TABLE employees

(...

department_id NUMBER(4) CONSTRAINT emp_deptid_fk

REFERENCES departments(department_id),

...

) --列一级

CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)

REFERENCES departments(department_id) --表一级

ON DELETE CASCADE:当父表中的行删除时,子表中的相应行也删除

ON DELETE SET:当父表中的行删除时,自表中相应行设为NULL

CHECK约束不允许下列表达式:

CURRVAL, NEXTVAL, LEVEL, and ROWNUM伪列

对系统SYSDATE, UID, USER, and USERENV函数的调用

对表中其他行或者列的查询

添加约束

ALTER TABLE table

ADD [CONSTRAINT constraint] type (column);

添加或者删除一个约束,不是更改它的定义;启用或者禁用约束;使用MODIFY子句来添加NOT NULL约束,且此时要求该列每一行都有值或者是个空表。

ALTER TABLE employees

ADD CONSTRAINT emp_manager_fk

FOREIGN KEY(manager_id)

REFERENCES employees(employee_id);

删除约束

ALTER TABLE table

DROP PRIMARY KEY | UNIQUE (column) |

CONSTRAINT constraint [CASCADE];

可以从USER_CONSTRAINTS或者USER_CONS_COLUMNS查到相关的约束信息,然后删除掉。CASCADE选项用来把依赖性的约束也一起删掉。

可以临时禁用约束

ALTER TABLE table

DISABLE CONSTRAINT constraint [CASCADE];

可以在CREATE TABLE或者ALTER TABLE语句中使用DISABLE子句

CASCADE选项会同时禁用依赖的约束

禁用唯一性约束或者主键约束会导致删除唯一性索引

启用约束

ALTER TABLE table

ENABLE CONSTRAINT constraint;

启用主键约束时,前面使用CASCADE禁用的依赖约束不会自动生效

CASCADE CONSTRAINTS子句伴随DROP COLUMN子句一起使用,用来删除所有和被删除的列相关的参考完整性约束,同时也会删除和该列相关的多列约束。

查询USER_CONSTRAINTS表来得到所有的约束定义和名字。

SELECT constraint_name, constraint_type,

search_condition

FROM user_constraints

WHERE table_name = 'EMPLOYEES';

约束的类型:C-CHECK, P-PRIMARY KEY, R-Referential Integrity(外键), U-UNIQUE。注意NOT NULL也属于CHECK约束

查看和列相关的约束,使用USER_CONS_COLUMNS视图

SELECT constraint_name, column_name

FROM user_cons_columns

WHERE table_name = 'EMPLOYEES';

练习(答案参见卷2的311页)

1. alter table emp

相关文档
最新文档