Oracle数据库之约束

约束

数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则。在Oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种实现。而约束易于维护并且性能最好,所以作为维护数据完整性的首选。

约束包括五种:

not null(不为空)  unique(唯一) primary key(主键) foreign key外键    check(检查)  五种。


not null(非空)

如果再列上定义了not null ,那么当插入数据时,必须为列提供数据

unique:

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

primary  key:

用于唯一的标示表行的数据,当定义主键约束后,该列不但不能重复而且不能为null【一张表最多只能有一个主键,但是可以有多个unique约束】

foreign key:

用于定义主表和从表之间的关系。外键约束要定义在从表上,主表则必须具有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是null

check:

用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求列值在100~200之间如果不在此范围就会提示出错!

例子:图1

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


 SQL> create table customer(customerId  char(20)  primary key,
   name varchar2(30)  not null,--非空
   address  varchar2(50),
   email varchar2(40)  unique,
   sex char(2)   default '男'  check(sex in ('男','女')),
   cardId char(18)
   );


 
SQL> create table purchase(customerId char(8) references  customer(customerId),
   goodsId char(8) references goods(goodsid),
  nums  number(10)  check(nums between 1 and 30));


图2图2


(2增加商品名不为空

SQL> alter table   goods modify  goodsName   not null;

(3)增加身份证也不能重复

SQL> alter table purchase modify nums unique;

(4)增加客户住址只能是海定,朝阳,东城,西城,通州,崇文!

SQL> alter table  customer add   constraint    customerAdd  varchar2(40)check(customerAdd in('海定','崇明','朝阳','东城','西城','通州'));


删除约束:

当不再需要某个约束时,可以删除。

alter table  表明   drop   constraint   名称;


在删除主键约束的时候,可能有错误,比如alter  table  表明  drop  primary  key ;这是因为在俩张表存在主从关系,那么删除主表的主键约束时,必须带上cascade选项;

alter table  表明 drop  primary key   cascade; 



显示约束信息:

1.显示约束信息

通过查数据字典视图user_constraints,可以显示当前用户所有的约束信息。

select   constraints_name ,constraint_type,status ,  validated  from   user_constraints  where  table_name="表明";

2.显示约束列

查询数据字典user_cons_columns,可以显示约束所对应的表列信息

select  column_name ,position  from  user_cons_columns  where   constraint_name="约束名";

图3图3

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值