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';
  • 相关阅读:
    当你发现前端传过来的空格是 xa0
    反转义——使从文件读取的失效的转义字符串生效
    openpyxl 读取前端传输的文件,并处理
    django实现下载excel
    IO模块的使用
    pandas 执行sql语句
    近期工作生活小总结
    入职一个月++近期学习++生活总结
    github访问不了
    实现Spring框架(二) SpringMVC框架
  • 原文地址:https://www.cnblogs.com/jiangbei/p/8214588.html
Copyright © 2011-2022 走看看