oracle---数据完整性和约束

数据的完整性
用于确保数据库数据遵从一定的商业和逻辑规则,比如数据库中存储的是林木的信息,如果包含性别则不符合此要求。
数据完整性可以使用约束、触发器、应用程序(过程,函数)三种方式来实现。
这三种方法中,因为约束易于维护,并且有最好的性能,所以作为维护数据完整性的首选。


约束有5种
not null--------非空,必须提供数据
unique----------唯一,不能重复,可以为null
primary key-----主键,不能重复且不为空,用于唯一的标示表行的数据,一张表只能有1个主键,但是可以有多个unique。联合主键:意思是多列一起做主键,比如mesh+id
foreign key-----外键,定义主表和从表之间的关系,外键约束要定义在从表上,主表必须有主键约束或是unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在,或是为null。
check-----------检查,比如要求性别必须是男或女。


create table goods(
    goodsId char(8) primary key,
    goodsName varchar2(40),
    unitprice  number(10,2) check(unitprice>0),
    category varchar2(8),
    provider varchar2(40)
)


create table cumtomer(
customerId char(8) primary key,
name varchar2(50) not null,
address varchar2(50),
email varchar2(50) unique,
sex char(2) default '男' check(sex in('男','女')),
cardId char(18)
)


如果是外键,需要保证字段类型和长度与主键一致
create table purchase(
customerId char(8) references costomer(custormerId),
goodsId char(8) references goods(goodsId),
nums number(3) check (nums between 1 and 30)
)


alter table 可以修改表结构,增加约束
not null 使用modify
其他约束使用add即可
alter table goods modify goodsName not null;
alter table customer add constraint aaa1 unique(cardId);  aaa1是约束的名称,自己命名
alter table customer add constraint aaa1 check(address in('朝阳','海淀','东城','西城'));


删除约束
alter table 表名 drop constraint 约束名称;(当时起的约束名称)
删除主键约束时,可能有错误,因为如果在2张表存在主从关系时,在删除主表的主键约束时,必须带上caseade选项(级联),如像:
alter table  表名 drop primary key caseade;


显示约束信息
通过查询数据字典视图user_constraints,可以显示当前用户的所有约束的信息
select constraints_name ,constraints_type ,status,validated from user_constraints where table_name='表名';


显示约束列
通过查询数据字典视图user_cons_columns,可以显示约束所对应的表列信息
select column_name ,position from user_cons_columns where constraint_name='约束名';
也有更简单容易的方法,直接用pl/sql 查看即可。


列级定义,在定义列的同时定义约束

create table department(dept_id number(2) constraint sss1 primary key,
name varchar2(12),
loc varchar2(12)
);
constraint sss1 primary key 和primary key 效果是一样的,如果简写,则程序会分配一个随机的名字


表级定义,指在定义了所有的列过后,再定义约束。注意,not null只能在列级上定义

create table emp(
emp_id number(4),
name varchar2(15),
dept_id number(2),
constraint sss1 primary key(emp_id),
constraint sss2 foreign key(dept_id) references department(dept_id)
);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值