Oracle——约束

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
原文地址:https://www.cnblogs.com/realshijing/p/8414810.html