《oracle教学课件》尚硅谷-宋红康-09-约束.ppt
第9节约 束constraint,讲师:宋红康 新浪微博:尚硅谷-宋红康,目 标,通过本章学习,您将可以:描述约束创建和维护约束,什么是约束,约束是表级的强制规定有以下五种约束:NOT NULLUNIQUE PRIMARY KEYFOREIGN KEYCHECK,注意事项,如果不指定约束名,Oracle server 自动按照 SYS_Cn 的格式指定约束名创建和修改约束:建表的同时建表之后可以在表级或列级定义约束可以通过数据字典视图查看约束,表级约束和列级约束,作用范围:列级约束只能作用在一个列上表级约束可以作用在多个列上(当然表级约束也 可以作用在一个列上)定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。非空(not null)约束只能定义在列上,定义约束,定义约束,列级表级,column CONSTRAINT constraint_name constraint_type,column,.CONSTRAINT constraint_name constraint_type(column,.),NOT NULL 约束,保证列值不能为空:,CREATE TABLE employees(employee_id NUMBER(6),last_name VARCHAR2(25)NOT NULL,salary NUMBER(8,2),commission_pct NUMBER(2,2),hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL,.,NOT NULL 约束,只能定义在列级:,可以在PL/SQLDEV的My objects-Tables-employees-Check constraints中查看,UNIQUE 约束,EMPLOYEES,UNIQUE 约束,INSERT INTO,唯一约束,允许出现多个空值:NULL。,UNIQUE 约束,可以定义在表级或列级:,CREATE TABLE employees(employee_id NUMBER(6),last_name VARCHAR2(25)UNIQUE,email VARCHAR2(25),salary NUMBER(8,2),commission_pct NUMBER(2,2),hire_date DATE NOT NULL,.CONSTRAINT emp_email_uk UNIQUE(email);,用户命名,系统命名,可以声明在email后面:CONSTRAINT emp_email_uk UNIQUE,也可以如此末处声明。,PRIMARY KEY 约束,DEPARTMENTS,PRIMARY KEY,CREATE TABLE departments(department_id NUMBER(4),department_name VARCHAR2(30)CONSTRAINT dept_name_nn NOT NULL,manager_id NUMBER(6),location_id NUMBER(4),CONSTRAINT dept_id_pk PRIMARY KEY(department_id);,PRIMARY KEY 约束,可以定义在表级或列级:,FOREIGN KEY 约束,DEPARTMENTS,EMPLOYEES,FOREIGN KEY 约束,可以定义在表级或列级:,CREATE TABLE employees(employee_id NUMBER(6),last_name VARCHAR2(25)NOT NULL,email VARCHAR2(25),salary NUMBER(8,2),commission_pct NUMBER(2,2),hire_date DATE NOT NULL,.department_id NUMBER(4),CONSTRAINT emp_dept_fk FOREIGN KEY(department_id)REFERENCES departments(department_id),CONSTRAINT emp_email_uk UNIQUE(email);,FOREIGN KEY 约束的关键字,FOREIGN KEY:在表级指定子表中的列REFERENCES:标示在父表中的列ON DELETE CASCADE(级联删除):当父表中的列被删除时,子表中相对应的列也被删除ON DELETE SET NULL(级联置空):子表中相应的列置空,CHECK 约束,定义每一行必须满足的条件,.,salaryNUMBER(2)CONSTRAINT emp_salary_min CHECK(salary 0),.,添加约束的语法,使用 ALTER TABLE 语句:添加或删除约束,但是不能修改约束有效化或无效化约束添加 NOT NULL 约束要使用 MODIFY 语句,ALTER TABLE table ADD CONSTRAINT constraint type(column);,以create table emp as select*from employees;为例,添加和删除约束,Alter table emp modify(empname varchar2(50)not null);,添加约束,添加约束举例,ALTER TABLE employeesADD CONSTRAINT emp_manager_fk FOREIGN KEY(manager_id)REFERENCES employees(employee_id);Table altered.,删除约束,从表 EMPLOYEES 中删除约束,ALTER TABLE employeesDROP CONSTRAINT emp_manager_fk;Table altered.,无效化约束,在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化。,ALTER TABLEemployeesDISABLE CONSTRAINTemp_emp_id_pk;Table altered.,激活约束,ENABLE 子句可将当前无效的约束激活 当定义或激活UNIQUE 或 PRIMARY KEY 约束时系统会自动创建UNIQUE 或 PRIMARY KEY索引,ALTER TABLEemployeesENABLE CONSTRAINTemp_emp_id_pk;Table altered.,SELECTconstraint_name,constraint_type,search_conditionFROMuser_constraintsWHEREtable_name=EMPLOYEES;,查询约束,查询数据字典视图 USER_CONSTRAINTS,SELECTconstraint_name,column_nameFROMuser_cons_columnsWHEREtable_name=EMPLOYEES;,查询定义约束的列,查询数据字典视图 USER_CONS_COLUMNS,总 结,通过本章学习,您已经学会如何创建约束描述约束的类型:NOT NULLUNIQUEPRIMARY KEYFOREIGN KEYCHECK,