Oracle系列十二 约束

约束是表级的强制规定
有以下五种约束:

  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK

注意事项

  • 如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名
  • 创建和修改约束:
  1. 建表的同时
  2. 建表之后
  • 可以在表级或列级定义约束
  • 可以通过数据字典视图查看约束

表级约束和列级约束
作用范围:
    ①列级约束只能作用在一个列上
    ②表级约束可以作用在多个列上(当然表级约束也可以作用在一个列上)
定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。
非空(not null) 约束只能定义在列上
定义约束

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));

定义约束

  • 列级
column [CONSTRAINT constraint_name] constraint_type,
  • 表级
column,...
  [CONSTRAINT constraint_name] constraint_type
  (column, ...),

NOT NULL 约束

  • 保证列值不能为空:
  • 只能定义在列级:

Oracle系列十二 约束
UNIQUE 约束

  • 唯一约束,允许出现多个空值:NULL。
  • 可以定义在表级或列级:

Oracle系列十二 约束
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));

Oracle系列十二 约束

FOREIGN KEY 约束
Oracle系列十二 约束

可以定义在表级或列级:

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 约束

  • 定义每一行必须满足的条件

Oracle系列十二 约束
添加约束

使用 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 employees
    ADD CONSTRAINT emp_manager_fk FOREIGN KEY ( manager_id )
        REFERENCES employees ( employee_id );

删除约束

  • 从表 EMPLOYEES 中删除约束
ALTER TABLE employees DROP CONSTRAINT emp_manager_fk;

无效化约束

  • 在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化。
ALTER TABLE employees DISABLE CONSTRAINT emp_emp_id_pk;

激活约束

  • ENABLE 子句可将当前无效的约束激活
  • 当定义或激活UNIQUE 或 PRIMARY KEY 约束时系统会自动创建UNIQUE 或 PRIMARY KEY索引
ALTER TABLE        employees
ENABLE CONSTRAINT    emp_emp_id_pk;

查询约束

  • 查询数据字典视图 USER_CONSTRAINTS
SELECT
    constraint_name,
    constraint_type,
    search_condition
FROM
    user_constraints
WHERE
    table_name = 'EMPLOYEES';

Oracle系列十二 约束

 

  • 查询数据字典视图 USER_CONS_COLUMNS
SELECT
    constraint_name,
    column_name
FROM
    user_cons_columns
WHERE
    table_name = 'EMPLOYEES';

Oracle系列十二 约束

上一篇:SQL Server - 代码实现为表添加相关约束


下一篇:约束(Constraints)