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 )
);
结论:一般情况列级别定义够用,但在使用复合主键时,就有必要使用表级定义