oracle维护数据的完整性

来源:互联网 发布:社交软件英语怎么说 编辑:程序博客网 时间:2024/06/05 20:14
oracle维护数据的完整性(约束)


在oracle中,约束包括:not null,unique,primary key,
foreign key 和check五种.


a)not null:即非空


b)unique(唯一):当定义了唯一约束后,该列值是不能重复的,
但是可以为null


c)primary key:即为主键,当定义主键约束后,该列不但不能
重复而且不能为null


需要说明的是:一张表最多只能有一个主键,但是可以有多个
unqiue约束


d)foreign key:即为外键


e)check:用于强制数据必须满足的条件 比如数据在某些范围之内




以一个商店售货系统表设计案例来说明上述约束的用法:


商品goods表(商品号goodsId,商品名goodsName,单价unitprice,
商品类别category,供应商provider)


客户customer表(客户号customerId,姓名name,住址address,
电邮email,性别sex,身份证cardId);


在定义中要求声明:
1)每个表的主外键
2)客户的姓名不能为空值
3)单价必须大于0,购买数量必须在1到30之间
4)电邮不能够重复
5)客户的性别必须是男 或者 女,默认是男


建表的sql脚本语句如下:


create table goods(
  2  goodsId char(8) primary key,--主键
  3  goodsName varchar2(30),
  4  unitprice number(10,2) check(unitprice > 0),
  5  category varchar2(50),
  6  provider varchar2(30));




 create table customer(
  2  coustomerId char(8) primary key,--主键
  3  name varchar2(50) not null,
  4  address varchar2(50),
  5  email varchar2(50) unique,
  6  sex  char(2) default '男' check (sex in ('男','女')),
  7  cardId char(18));
Table created




create table purchase(
  2  customerId char(8) references customer(customerId),
  3  goodsId char(8) references goods(goodsId),
  4  nums number(10) check (nums between 1 and 30));


oracle维护数据的完整性(维护)


如果在建表时忘记建立必要的约束,则可以在建表后使用alter table命令为
表增加约束.但是要注意:增加not null约束时,需要使用modify选项,而增加
其它四种约束则使用add选项




以上面的案例为例子:
如:增加商品名也不不能为空
alter table goods modify goodsname not null;


身份证不能是重复的
alter table customer add constraint(约束) cardunique(约束的名字,可随意取) unique(cardid);


增加客户的住址只能是'东城' 或者'西城'
alter table customer add constraint addresscheck check (address in ('东城,西城'));


删除约束:
alter table 表名 drop constraint 约束的名字;


在删除主键约束的时候,可能有错误 如:
alter table 表明 drop primary key;


这是因为如果在两张表存在主从关系,那么在删除主表的主键
约束时,必须带上cascade选项 如:
alter table 表名 drop primary key cascade;


oracle维护数据的完整性(表级定义和列级定义)


a)列级定义:
列级定义是在定义列的同时定义约束
如:
create table department(
   dept_id number(2) constraint pk_department primary key


);


b)表级定义:
表级定义是指在定义了所有列后,再定义约束.这里需要注意:not null
约束只能在列级上定义.


如:
create table employee
(


  id number(2),
  constraint pk_employee primary key (id)
);



原创粉丝点击