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之间如果不在此范围就会提示出错!
例子:
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增加商品名不为空
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
约束
数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则。在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之间如果不在此范围就会提示出错!
例子:
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增加商品名不为空
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