• 1. 约束
  • 2. 目标通过本章学习,您将可以: 描述约束 创建和维护约束
  • 3. 什么是约束约束是表级的强制规定 约束放置在表中删除有关联关系的数据 有以下五种约束: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK
  • 4. 注意事项如果不指定约束名 Oracle server 自动按照 SYS_Cn 的格式指定约束名 在什么时候创建约束: 建表的同时 建表之后 可以在表级或列级定义约束 可以通过数据字典视图查看约束
  • 5. 定义约束CREATE TABLE [schema.]table (column datatype [DEFAULT expr] [column_constraint], ... [table_constraint][,...]);CREATE TABLE employees( employee_id NUMBER(6), first_name VARCHAR2(20), ... job_id VARCHAR2(10) NOT NULL, CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));
  • 6. 定义约束列级 表级column [CONSTRAINT constraint_name] constraint_type,column,... [CONSTRAINT constraint_name] constraint_type (column, ...),
  • 7. NOT NULL 约束保证列值不能为空:NOT NULL 约束无NOT NULL 约束 NOT NULL 约束…
  • 8. 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 约束只能定义在列级: 系统命名用户命名
  • 9. UNIQUE 约束EMPLOYEES UNIQUE 约束INSERT INTO不允许: 已经存在允许…
  • 10. UNIQUE 约束可以定义在表级或列级: 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, ... CONSTRAINT emp_email_uk UNIQUE(email));
  • 11. PRIMARY KEY 约束DEPARTMENTS PRIMARY KEYINSERT INTO不允许 (空值)不允许 (50 已经存在)…
  • 12. 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 约束可以定义在表级或列级:
  • 13. FOREIGN KEY 约束DEPARTMENTS EMPLOYEESFOREIGN KEYINSERT INTO不允许(9 不存在)允许PRIMARY KEY……
  • 14. 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));
  • 15. FOREIGN KEY 约束的关键字FOREIGN KEY: 在表级指定子表中的列 REFERENCES: 标示在父表中的列 ON DELETE CASCADE: 当父表中的列被删除是,子表中相对应的列也被删除 ON DELETE SET NULL: 子表中相应的列置空
  • 16. CHECK 约束定义每一行必须满足的条件 以下的表达式是不允许的: 出现CURRVAL, NEXTVAL, LEVEL, 和ROWNUM 伪列 使用 SYSDATE, UID, USER, 和 USERENV 函数 在查询中涉及到其它列的值..., salary NUMBER(2) CONSTRAINT emp_salary_min CHECK (salary > 0),...
  • 17. 添加约束的语法使用 ALTER TABLE 语句: 添加或删除约束, 但是不能修改约束 有效化或无效化约束 添加 NOT NULL 约束要使用 MODIFY 语句 ALTER TABLE table ADD [CONSTRAINT constraint] type (column);
  • 18. 添加约束添加约束举例ALTER TABLE employees ADD CONSTRAINT emp_manager_fk FOREIGN KEY(manager_id) REFERENCES employees(employee_id); Table altered.
  • 19. 删除约束从表 EMPLOYEES 中删除约束 使用CASCADE选项删除约束ALTER TABLE employees DROP CONSTRAINT emp_manager_fk; Table altered.ALTER TABLE departments DROP PRIMARY KEY CASCADE; Table altered.
  • 20. 无效化约束在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化。 使用 CASCADE 选项将相关的约束也无效化ALTER TABLE employees DISABLE CONSTRAINT emp_emp_id_pk CASCADE; Table altered.
  • 21. 激活约束ENABLE 子句可将当前无效的约束激活 当定义或激活UNIQUE 或 PRIMARY KEY 约束时系统会自动创建UNIQUE 或 PRIMARY KEY索引ALTER TABLE employees ENABLE CONSTRAINT emp_emp_id_pk; Table altered.
  • 22. 及连约束CASCADE CONSTRAINTS 子句在 DROP COLUMN 子句中使用 在删除表的列时 CASCADE CONSTRAINTS 子句指定将相关的约束一起删除 在删除表的列时 CASCADE CONSTRAINTS 子句同时也删除多列约束
  • 23. 及连约束及连约束举例:ALTER TABLE test1 DROP (pk) CASCADE CONSTRAINTS; Table altered.ALTER TABLE test1 DROP (pk, fk, col1) CASCADE CONSTRAINTS; Table altered.
  • 24. SELECT constraint_name, constraint_type, search_condition FROM user_constraints WHERE table_name = 'EMPLOYEES';查询约束查询数据字典视图 USER_CONSTRAINTS…
  • 25. SELECT constraint_name, column_name FROM user_cons_columns WHERE table_name = 'EMPLOYEES';查询定义约束的列查询数据字典视图 USER_CONS_COLUMNS…
  • 26. 总结通过本章学习,您已经学会如何创建约束 描述约束的类型: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK 查询数据字典视图 以获得约束的信息
  • 27. (本页无文本内容)
  • 28. (本页无文本内容)
  • 29. (本页无文本内容)