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;

原文地址:https://www.cnblogs.com/echola/p/9508023.html