Oracle数据库之约束-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

Oracle数据库之约束

简介: 约束 数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则。在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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: