zoukankan      html  css  js  c++  java
  • 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';
  • 相关阅读:
    Java 的Throwable、error、exception的区别
    最长回文子序列和最长回文子串
    牛客练习赛40 C-小A与欧拉路
    判断一棵树是否为二叉搜索树,完全二叉树和二叉平衡树
    Java语言的特点和特性
    设计模式
    联合索引和单列索引
    如何优化sql查询
    数据库的范式和约束
    数据库事务ACID和事务的隔离级别
  • 原文地址:https://www.cnblogs.com/jiangbei/p/8214588.html
Copyright © 2011-2022 走看看