NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名
--指定约束名 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));
- 非空(not null) 约束只能定义在列上
- 唯一约束,允许出现多个空值:NULL。
- primary key主键约束,既不能为空也不能重复。
一、外键约束
主表:在数据库中存在主键用于与其他表相关联
从表:以主表的主键作为外键的表。
create table employees( --列级约束 id number(10), name varchar2(20) constraint emp_name_nn not null, email varchar2(20), salary number(10,2) constraint emp_salary_min check (salary > 1500), department_id number(10), --表级约束 constraint emp_email_uk unique(email), constraint emp_id_pk primary key(id), constraint emp_dept_id_fk foreign key(department_id) references departments(department_id ) ON DELETE CASCADE )
- FOREIGN KEY: 指定从表中的列
- REFERENCES: 标示主表中的列
- ON DELETE CASCADE(级联删除): 当主表中的列被删除时,从表中相对应的列也被删除
- ON DELETE SET NULL(级联置空): 从表中相应的列置空
CHECK 约束
salary NUMBER(2) CONSTRAINT emp_salary_min CHECK (salary > 0)
二、添加和修改约束
- 添加 NOT NULL 约束要使用 MODIFY 语句
Alter table emp modify(empname varchar2(50) not null);
- 添加其他约束用ADD语句
ALTER TABLE employees ADD CONSTRAINT emp_email_pk primary(employee_id)
- 删除约束
ALTER TABLE employees DROP CONSTRAINT emp_email_uk;
三、查看约束
- 查询数据字典视图 USER_CONSTRAINTS
SELECT constraint_name, constraint_type, search_condition FROM user_constraints WHERE table_name = 'EMPLOYEES';
CONSTRAINT_NAME CONSTRAINT_TYPE SEARCH_CONDITION -------------- ------------------------ -------------------- EMP_DEPT_FK R EMP_JOB_FK R EMP_MANAGER_FK R EMP_LAST_NAME_NN C "LAST_NAME" IS NOT NULL EMP_EMAIL_NN C "EMAIL" IS NOT NULL EMP_HIRE_DATE_NN C "HIRE_DATE" IS NOT NULL EMP_JOB_NN C "JOB_ID" IS NOT NULL EMP_SALARY_MIN C salary > 0 EMP_EMAIL_UK U EMP_EMP_ID_PK P
- 查询定义约束的列,查询数据字典视图 USER_CONS_COLUMNS
SELECT constraint_name, column_name FROM user_cons_columns WHERE table_name = 'EMPLOYEES';
CONSTRAINT_NAME COLUMN_NAME --------------------- --------------------- EMP_LAST_NAME_NN LAST_NAME EMP_EMAIL_NN EMAIL EMP_HIRE_DATE_NN HIRE_DATE EMP_JOB_NN JOB_ID EMP_SALARY_MIN SALARY EMP_EMAIL_UK EMAIL EMP_EMP_ID_PK EMPLOYEE_ID EMP_DEPT_FK DEPARTMENT_ID EMP_JOB_FK JOB_ID EMP_MANAGER_FK MANAGER_ID