oracle 的数据完整性

  oracle 的数据完整性

not null(非空)

unique(唯一)

  当定义了唯一主键约束后,该列值是不能重复的,但是可以为null

例:

   create table user1(id number primary key,address  nvarchar2(50)  not null,email nvarchar2(30) unique);

primary key(主键)

foreign key(外键)

check

   用于强制行数据必须满足条件,假定在sal列上定义了check约束,并要求sal列值

   在1000~2000之间,如果不在1000~2000之间就会提示出错

例:

 create table user2(id number primary key,sal number check(sal>1000 and sal<2000));

 

综合案例:

-------------------------------------------------------------------------------------

create table goods(goodsId  number primary key

,goodsName nvarchar2(32)

,unitprice number check(unitprice > 0)

,category nvarchar2(64)

,provider nvarchar2(64)

);

create table customer(customerId number primary key

,name nvarchar2(32) not null

,address nvarchar2(64)

,email nvarchar2(32) unique

,sex char(2) default ‘男’ check(sex in (‘男’,’女’))

,cardId nvarchar2(20)

);

create table  purchase (

               customerId number references customer(customerId)

              ,goodsId  number references goods(goodsId)               

             ,nums number check(nums >=1 and nums <=30)

);

 

维护:

基本语法说明:

    alter table 表名 add constraint  约束名  约束种类【check/unique/primary key/foreign】(字段)

    alter table 表名 modify 字段名 not null

1.增加商品名布也不能为空?

  alter table goods modify goodsName not null;

2.增加身份证也不能重复?

  alter table customer add constraint c_cardId unique(cardId);

3.增加客户的地址只能是“海淀”、“朝阳”……

  alter table customer add constraint c_add check(address in(“海淀”))

 

删除约束

alter table 表名 drop constraint 约束名

 

:删除有外键引用的主键时,可使用cascade级联删除

 

列级定义和表级定义

列级定义:

   直接在列后定义约束

   比如:id number primary key,name nvarchar2(32)

 

表级定义:

       定义完所有的列后再定义约束

       比如:

         create table order(

          customerID number,

          productID  number,

          price number,

          constraint pk_customer_product primary key(customerID, productID )

);

 

    结论:一般情况列级别定义够用,但在使用复合主键时,就有必要使用表级定义

 

posted @ 2017-08-09 15:53  王高啊  阅读(216)  评论(0编辑  收藏  举报