Oracle入门第四天(下)——约束

一、概述

  1.分类

  表级约束主要分为以下几种:  

    NOT NULL

    UNIQUE

    PRIMARY KEY

    FOREIGN KEY

    CHECK

  2.注意事项

    如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名

    创建和修改约束: 建表的同时 建表之

    可以在表级或列级定义约束

    可以通过数据字典视图查看约束

  3.建立约束的方式 

    列级column [CONSTRAINT constraint_name] constraint_type,

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

二、非空约束——NOT NULL

  在定义表DDL时直接添加:

CREATE TABLE emp3(
       id NUMBER(32) NOT NULL,
       name VARCHAR2(10) CONSTRAINT emp3_name_nn NOT NULL
)

  1.注意单词constraint的写法;

  2.可以采用自定义命名约束(一般用 表名_列名_约束名的形式),若省略,则采用系统命名

  

三、唯一约束——UNIQUE

  注意以下两种添加约束的写法:

CREATE TABLE emp4(
       id NUMBER(32) UNIQUE,
       name VARCHAR2(10),
       CONSTRAINT emp4_name_uk UNIQUE(name)
)

   1.唯一约束中是允许出现NULL值的

   2.允许出现多个NULL值

   // 建议采用给约束命名的方式进行管理约束

四、主键约束——PRIMARY KEY

  根据主键的定义,主键约束自动拥有:唯一非空约束 

CREATE TABLE emp5(
       id NUMBER(32),
       name VARCHAR2(10),
       CONSTRAINT emp4_id_pk PRIMARY KEY(id)
)

  // 主键用于唯一确定一条记录

五、外键约束——FOREIGN KEY

  参照其他列的主键,称为外键(外键的值必须在参考列存在)

CREATE TABLE emp6(
       id NUMBER(32),
       name VARCHAR2(10),
       CONSTRAINT emp4_id_fk FOREIGN KEY(id) REFERENCES emp5(id)
)

  外键可选项:

    FOREIGN KEY: 在表级指定子表中的列

    REFERENCES: 标示在父表中的列

    ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除

    ON DELETE SET NULL(级联置空): 子表中相应的列置空

  示例:

CREATE TABLE emp6(
       id NUMBER(32),
       name VARCHAR2(10),
       CONSTRAINT emp4_id_fk FOREIGN KEY(id) REFERENCES emp5(id) ON DELETE CASCADE
)

六、检查约束——CHECK

  定义必须满足的条件的约束

CREATE TABLE emp7(
       id NUMBER(32),
       name VARCHAR2(10),
       CONSTRAINT emp7_id_ck CHECK(id > 1000 AND id < 2000)
)

七、约束管理

  都是基于ALTER TABLE进行管理的!

  1.添加约束

 

ALTER TABLE     table
  ADD [CONSTRAINT constraint] type (column);

 

  示例:

ALTER TABLE emp7 ADD(CONSTRAINT emp7_name_pk PRIMARY KEY(name))

  添加NOT NULL约束需要使用MODIFY关键字:

Alter table emp modify(empname varchar2(50) not null);

  2.删除约束

ALTER TABLE      employees
DROP CONSTRAINT  emp_manager_fk;

  // 所以说自定义命名约束便于管理

  3.无效化约束

ALTER TABLE        employees
DISABLE CONSTRAINT    emp_emp_id_pk;

  4.激活无效的约束

ALTER TABLE        employees
ENABLE CONSTRAINT    emp_emp_id_pk;

  5.查询约束

SELECT    constraint_name, constraint_type,
    search_condition
FROM    user_constraints
WHERE    table_name = 'EMPLOYEES';

  6.查询约束的列

    通过数据字典视图:USER_CONS_COLUMNS,实际上,如果约束名有规范是可以直接看到的!

 

SELECT    constraint_name, column_name
FROM    user_cons_columns
WHERE    table_name = 'EMPLOYEES';

 

posted @ 2018-01-06 16:29  ---江北  阅读(260)  评论(0编辑  收藏  举报
TOP