zoukankan      html  css  js  c++  java
  • Oracle 约束

    约束:ORACLE提供的自动保持数据库完整性的一种方法,它通过限制字段中数据、记录中数据和表之间的数据来保证数据的完整性。

    完整性约束的基本语法格式:

    [constraint  constraint_name ] <约束类型>

    说明:约束不指定名称时,系统会给定一个名称。

    ORACLE中的约束:

                                 主键约束(primary key constraint)

                                 唯一约束(unique constraint)

                                 默认约束(default constraint)

                                 非空约束(not null constraint)

                                 检查约束(check constraint)

                                 外键约束(foreign key constraint)

    1、主键约束

    primary key 约束用于定义基本表的主键,它是唯一确定表中每一条记录的标识符,其值不能为NULL,也不能重复,以此保证实体的完整性。表中主键只能有一个,但可以由多个列构成。如:primary key(学号,科目编号)

    创建表时设置主键(primary key)约束

    1  create table student (
    2         --第一种:                                   --第二种:stuid number(1),
    3         stuid number(1) primary key,                --constraint stuid_pk primary_key(stuid)  
    4         stuname varchar2(20),                       
    5         stuage number(1),
    6         stusex number(2)
    7    )

     修改主键约束

    1  alter table student
    2  constraint stuid_pk primary_key(stuid);

     2、非空约束和默认约束

    not null约束用于确保列不能为null,如果在列上定义not null约束,那么当插入数据时,必须为该列提供数据;当更新列数据时,不能将其值设置为null。

    非空约束是列约束。

    列级约束:

    column [constranint constranint_name] constraint_type

    说明:列级约束必须跟在列定义的后面

    表级约束:

    column,....

    column [constranint constranint_name] constraint_type

    (column,....)

    说明:表级约束不与列一起,而是单独定义的

    创建表时设置非空(not null)约束:

    1 create table student (
    2        stuid number(20) not null,--两种方式优选第一种
    3        stuage number(2) constraint nn_stuage not null
    4 );      

    修改表添加约束的格式对比

    修改表添加约束的语法格式:

    alter table table_name
    add [constraint constraint_name] constranint_type(column);

                   而添加非空(not null)约束要使用modify语句

    alter table table_name
    modify(column datatype not null);

    删除约束的方式

    • 将约束无效化或激活

    disable|enable constraint constraint_name

    • 将约束彻底结束:

    drop constraint constraint _name

    • 删除主键约束的格式:

    drop primary key

    删除非空约束的方式

    语法格式:

          alter table table_name

          modify column_name datatype null;

    创建表时设置默认(default)约束:

    1 create table student (
    2         stuid number(20) not null default 1,--当系统未赋值,默认赋1。
    3      
    4  );  

    3、唯一约束

    唯一约束用于指定一个或者多个列的组合值具有唯一性,以防止在列中输入重复的值。

         注意:

        •  使用唯一性约束的列允许为空值;
        •  一个表中可以允许有多个唯一性约束;
        •   可以把唯一性约束定义在多个列上;

    创建表时设置唯一(unique)约束

    1  create table tstudent (                    
    2         stuid number(1) primary key,                 
    3         stuname varchar2(20),                       
    4         stuage number(1),
    5         stusex number(2),
    6         email varchar(50) unique,               --第一种列级约束
    7         cardid varchar2(18),
    8         constraint uk_cardid unique(cardid)     --第二种表级约束,用户自定义添加
    9  );    

     

             修改表时添加唯一性约束

                 alter table student add constraint uk_cardid unique(cardid);

     禁用约束 

    alter table student disable constraint uk_cardid unique(cardid);

     彻底删除

    alter table student drop constraint uk_cardid;

     

    4、检查约束

    检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。

    创建表时设置检查(check)约束

    1  create table student (                    
    2  stuid number(1) primary key,                 
    3  stuname varchar2(20),                       
    4  stuage number(1),
    5  stusex char(2) check(stusex='男'  or stusex='女'),           --第一种列级约束
    6  email varchar2(50)
    7  constraint ck_stusex check(stusex='男'  or stusex='女')      --第二种表级约束
    8 );

     修改表时添加检查约束

    alter table student add constraint ck_stusex check(stusex='男' or stusex='女');

           禁用约束

                  alter table student disable constraint ck_stusex;

            彻底删除

                  alter table student drop constraint ck_stusex;

    5、外键约束

    外键(foreign key)适用于建立和加强两个表数据之间的连接的一列或多列。外键约束是唯一设计两个表关系的约束。

    • 列级约束

    creat table 从表

    (column_name datatype references

       主表(column_name)[on delete cascade],..);   

    说明:[on delete cascade]可选项,代表级联删除,删除与之相关的元素。

    • 表级约束

    constraint constraint_name foreign key (column_name)

    references 主表(column_name)

    [on delete cascade]

    创建时设置外键(foreign key)约束

    主表:

    1 create table department(
    2        depid varchar2(10) primary key,
    3        depname varchar2(30)
    4 );

    从表1:

     create table student(
            sid number(8,0),
            name varchar2(20),
            sex char(2),
            birthday date,
            address varchar2(50),
            depid varchar2(10) references department(depid)      --第一种
     );

    从表2:

     1 create table student(
     2        sid number(8,0),
     3        name varchar2(20),
     4        sex char(2),
     5        birthday date,
     6        address varchar2(50),
     7        depid varchar2(10),
     8        constraint fk_depid foreign key(depid)             --第二种
     9        references department(depid)
    10        on delete cascade
    11 );

        创建完成后:

                注意:

        •  设置外键约束时主表的字段必须是主键列(或唯一列)
        •  主从表中相应字段必须是同一数据类型
        •  从表中外键字段的值必须来自表中的相应字段的值,或者为null值

    修改表时添加外键约束:

    alter table student

    add constraint fk_depid foreign key(depid)

    references department(depid)

    on delete cascade;

          禁用约束:

          alter table student disable constraint fk_depid;

          彻底删除:

          alte table student drop constraint fk_depid;

  • 相关阅读:
    Linux下leveldb安装及PHP扩展
    C语言中的预处理程序之#include
    C#设计模式——组合模式(Composite Pattern)
    C#设计模式——桥接模式(Bridge Pattern)
    C#设计模式——备忘录模式(Memento Pattern)
    C#设计模式——外观模式(Facade Pattern)
    C#设计模式——观察者模式(Observer Pattern)
    C#设计模式——原型模式(Prototype Pattern)
    C#设计模式——中介者模式(Mediator Pattern)
    C#设计模式——享元模式(Flyweight Pattern)
  • 原文地址:https://www.cnblogs.com/echola/p/9508023.html
Copyright © 2011-2022 走看看