zoukankan      html  css  js  c++  java
  • oracle Constraint[相似 constraint使用方法总结 I]

    约束简单介绍
    约束用于确保数据库数据满足特定的商业逻辑或者企业规则,假设定义了约束,而且数据不符

    合约束,那么DML操作(INSERT、UPDATE、DELETE)将不能成功运行。约束包含NOT NULL、UNIQUE、PRIMARY KEY、FOREING KEY 以及CHECK等五种类型

    定义约束
    列级约束:

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

    1.定义NOT NULL约束
    NOT NULL 约束仅仅能在列级定义,不能在表级定义
    例:
    CREATE TABLE emp01(
    eno INT  NOT NULL,
    name VARCHAR2(10) CONSTRAINT nn_name2 NOT NULL,
    salary NUMBER(6,2)
    );
    上例中,eno列与name列上定义了NOT NULL约束,当中eno列的NOT NULL约束没有指定约束名,而

    name列则指定了约束名nn_name。
    能够通过查询user_constraints字典来查看所定义的约束,如:
    SQL> select constraint_name,constraint_type from user_constraints
    2  where table_name='EMP01';

    CONSTRAINT_NAME                                              CO
    ------------------------------------------------------------ --
    SYS_C0010618                                                 C
    NN_NAME                                                      C
    可见,没有给约束名的,系统将会自己主动的定义一个约束名称,当中约束类型中,P:表示主键,R:

    表示外键,C表示NOT NULL或CHECK,U表示UNIQUE。且系统中同一方案下的的约束名不能反复

    2.定义UNIQUE约束
    定义了惟一约束之后,惟一约束列的列值不能反复,但能够为NULL。UNIQUE约束既能够在列级

    定义,也能够在表级定义
    例:
    CREATE TABLE emp02(
    eno INT UNIQUE,name VARCHAR2(10) CONSTRAINT u_name UNIQUE,
    salary NUMBER(6,2)
    );
    相同,假设没有给出约束名,系统会自己主动定义一个名称,可从查询结果得出
    SQL> select constraint_name,constraint_type from user_constraints
    2  where table_name='EMP02';

    CONSTRAINT_NAME                                              CO
    ------------------------------------------------------------ --
    SYS_C0010623                                                 U
    U_NAME
    U

    3.定义PRIMARY KEY 约束
    当定义主键约束后,主键约束列的列值不仅不能反复,并且也不能为NULL。主键约束既能够在

    列级定义,也能够在表级定义。一张表最多仅仅能具有一个主键约束,当一个表中的多个列都要为

    主键是,能够在表级定义。
    例1:列级定义主键
    CREATE TABLE depto04(
    dno INT PRIMARY KEY,
    dname VARCHAR2(10),loc VARCHAR2(20)
    );
    通过查询user_constraints可得出
    SQL>  select constraint_name ,constraint_type from user_constraints
    2  where table_name='DEPT04';

    CONSTRAINT_NAME                                              CO
    ------------------------------------------------------------ --
    SYS_C0010625                                                 P
    通过查询user_cons_columns可得出
    SQL> select constraint_name,column_name from user_cons_columns
    2  where table_name='DEPT04';

    CONSTRAINT_NAME                                              COLUMN_NAME
    ------------------------------------------------------------ ------------

    SYS_C0010625                                                 DNO
    例2:表级定义主键
    CREATE TABLE dept05(
    dno INT,
    dname VARCHAR2(10),loc VARCHAR2(20),
    PRIMARY KEY(dno,dname)
    );
    通过查询user_constraints能够得出
    SQL> select constraint_name,constraint_type from user_constraints
    2  where table_name='DEPT05';

    CONSTRAINT_NAME                                              CO
    ------------------------------------------------------------ --
    SYS_C0010626                                                 P
    通过查询user_cons_columns可得出
    SQL> select constraint_name,column_name from user_cons_columns
    2  where table_name='DEPT05';

    CONSTRAINT_NAME                                              COLUMN_NAME
    ------------------------------------------------------------ -------------

    SYS_C0010626                                                 DNO
    SYS_C0010626                                                 DNAME
    可见,当在表级定义时,约束名称将会同样,而在user_cons_columns查询是,每一列将相应约束

    名称同样的两条记录

    4.定义FOREING KEY约束
    当定义了外部键约束之后,要求外部键列的数据必须在主表的主键列(或惟一列)中存在,或

    者为NULL,FOREING KEY约束既能够在列级定义,也能够在表级定义。
    keyword说明:
    FOREING KEY:该选项用于指定在表级定义外部键约束。当在表级定义外部键约束时必须指定该选

    项,在列级定义外部键约束不须要指定该选项
    REFERENCES:该选项用于指定主表名及其主键列。当定义外部键约束时,该选项必须指定。
    ON DELETE CASCAED:该选项用于指定级联删除选项。假设在定义外部键约束时指定了该选项,那

    么当删除主表数据时会级联删除从表的相关数据。
    ON DELECT SET NULL:该选项用于指定转换相关的外部键值为NULL,假设在定义外部键约束时指定

    了该选项,那么当删除主表数据时会将从表外部键列的数据设置为NULL。
    例1:列级定义外键约束
    CREATE TABLE emp04(
    eno INT,name VARCHAR2(10),salary NUMBER(6,2),
    dno INT CONSTRAINT fk_dno REFERENCES dept04(dno)
    );
    SQL> select constraint_name,constraint_type from user_constraints
    2  where table_name='EMP04';

    CONSTRAINT_NAME                                              CO
    ------------------------------------------------------------ --
    FK_DNO                                                       R
    SQL> select constraint_name,column_name from user_cons_columns
    2  where table_name='EMP04';

    CONSTRAINT_NAME                                              COLUMN_NAME
    ------------------------------------------------------------ -----------

    FK_DNO                                                       DNO
    例2:表级定义外键约束
    CREATE TABLE emp05(
    eno INT,name VARCHAR2(10),salary NUMBER(6,2),
    dno INT,
    CONSTRAINT fk_dno_name FOREIGN KEY(dno,name) REFERENCES dept05(dno,dname)
    );
    SQL> select constraint_name,constraint_type from user_constraints
    2  where table_name='EMP05'
    3  ;

    CONSTRAINT_NAME                                              CO
    ------------------------------------------------------------ --
    FK_DNO_NAME                                                  R
    SQL> select constraint_name,column_name from user_cons_columns
    2  where table_name='EMP05';

    CONSTRAINT_NAME                                              COLUMN_NAME
    ------------------------------------------------------------ -----------

    FK_DNO_NAME                                                  DNO
    FK_DNO_NAME                                                  NAME

    5.定义CHECK约束
    CHECK约束既能够在列级定义,也能够在表级定义。CHECK约束同意列为NULL。
    例:
    CREATE TABLE emp06(
    eno INT,name VARCHAR2(10),salary NUMBER(6,2),
    CHECK (salary BETWEEN 1000 AND 5000)
    );
    SQL>  select constraint_name,constraint_type from user_constraints
    2   where table_name='EMP06';

    CONSTRAINT_NAME                                              CO
    ------------------------------------------------------------ --
    SYS_C0010629                                                 C
    SQL> select constraint_name,column_name from user_cons_columns
    2  where table_name='EMP06';

    CONSTRAINT_NAME                                              COLUMN_NAME
    ------------------------------------------------------------ -----------

    SYS_C0010629                                                 SALARY

    6.定义复合约束
    复合约束即在表级定义,基于多列的复合约束,如:
    CREATE TABLE dept05(
    dno INT,
    dname VARCHAR2(10),loc VARCHAR2(20),
    PRIMARY KEY(dno,dname)
    );或
    CREATE TABLE emp05(
    eno INT,name VARCHAR2(10),salary NUMBER(6,2),
    dno INT,
    CONSTRAINT fk_dno_name FOREIGN KEY(dno,name) REFERENCES dept05(dno,dname)
    );

    9.3维护约束
    9.3.1添加约束

    假设添加UNIQUE、PRIMARY KEY、FOREIGN KEY 和CKECK 必须使用ALTER TABLE语句的ADD子句;

    假设添加NOT NULL约束,那么必须使用ALTER TABLE语句的MODIFY子句,如:
    ALTER TABLE table_name ADD [CONSTRAINT constraint_name]
    constraint_type (column,...)
    ALTER TABLE table_name MODIFY column
    [CONSTRAINT constraint_name] NOT NULL;
    9.3.2改动约束名
    在同一个方案中,约束名必须惟一,而且约束名也不能与其它对象同名。当鱫IMPDP工具或者IMP

    工具导入其它对象时,如发现有同名的对象,将会出错
    语法:
    ALTER TABLE table_name RENAME CONSTRAINT old_constraint_name
    TO new_constraint_name;
    例:
    ALTER TABLE emp01 RENAME CONSTRAINT SYS_C005028
    TO ck_emp01_salary;
    9.3.3 删除约束
    当删除特定表的主键约束时,假设该表具有相关的从表,那么在删除主键约束

    时必须带有CASCAED选项
    语法:
    ALTER TABLE table_name DROP
    CONSTRAINT constraint_name |PRIMARY KEY
    例1
    ALTER TABLE emp01 DROP CONSTRAINT ck_emp01_salary;
    例2
    ALTER TABLE dept01 DROP PRIMARY KEY CASCAED
    9.3.4禁止约束
    禁止约束指使约束暂时失效。当禁止了约束之后,约束规则将不再生效。在使用SQL*LOADER或

    INSERT装载数据之前,为了加快数据装载速度,应该首先禁止约束,然后装载数据。
    语法:
    ALTER TABLE table_name
    DISABLE CONSTRAINT constaint_name [CASCAED];--CASCAED用于指定级联禁止从表的外部键

    约束
    例:
    ALTER TABLE emp05 DISABLE CONSTAINT SYS_C00502;
    9.3.5 激活约束
    语法:
    ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;
    例:
    ALTER TABLE emp05 ENABLE CONSTRAINT SYS_C005022;
    9.4 显示约束信息
    1.USER_CONSTRAINTS
    2.USER_CONS_COLUMNS

    Zz_cnblogs :http://www.cnblogs.com/ljcbest/archive/2010/09/02/1816346.html
  • 相关阅读:
    控件右键菜单的实现以及选中后勾选
    DataGridView控件使用
    return,continue,break的区别
    break和continue的区别 循环终止办法
    事件
    跨线程改变控件属性 线程调用带参数方法
    XML配置文件相关
    抽象类及与接口的区别
    字典
    Oracle学习第一天
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4047391.html
Copyright © 2011-2022 走看看