ORACLE开发:Oracle的束缚介绍与束缚保护
数据的完全性用于确保数据库数据遵从一定的商业的逻辑规则。在oracle中,数据完全性可使用束缚、触发器、利用程序(进程、函数)三种方法来实现,在这三种方法中,由于束缚易于保护,并且具有最好的性能,所以作为保护数据完全性的首选。
一、甚么是束缚?
束缚用于确保数据库数据满足特定的商业规则。
二、束缚分类
1、not null(非空)
如果在列上定义了not null,那末当插入数据时,一定要为列提供数据。
insert into user1 values(001,”);//会报错
–ORA-01400: 没法将 NULL 插入 (“SCOTT”.”USER1″.”NAME”)
2、default(默许)
插入null值时,提供默许值。
— 默许值的插入方法
insert into yg values(1,’A’,default);
insert into yg (编号,姓名)values(1,’A’);
3、unique(唯一)
当定义了唯一束缚后,该列值是不能重复的,但是可以为null。
insert into user2 values(1,111);//id输入重复的值是会报错
–ORA-00001: 违背唯一束缚条件 (SCOTT.SYS_C0011172)
注意:oracle中unique可以为null,而且允许多行动null
4、primary key(主键)
用于唯一的标识表行的数据,当定义主键束缚后,该列不但不能重复,而且不能为null。需要说明的是:一张表最多只能有一个主键,但是可以有多个unique束缚。
insert into user3 values(1,111);
insert into user3 values(1,111);//报错,唯一性
–ORA-00001: 违背唯一束缚条件 (SCOTT.SYS_C0011173)
insert into user3 values(null,111);//报错,不能为null
–ORA-01400: 没法将 NULL 插入 (“SCOTT”.”USER3″.”ID”)
特别说明primary key与unique的区分:
- 一张表可以有多个unique(唯一)束缚;
- 一张表只能有一个主键;
- 设置为主键的列不能有null值;
- primary key的所在列,会自动创建索引。但unique不会自动创建索引。
5、foreign key(外键):
用于定义主表和从表之间的关系,外键束缚要定义在从表上,主表则一定要具有主键束缚或是unique束缚,当定义外键束缚后,要求外键列数据一定要在主表的主键列存在或是为null。
create table stus(id number primary key,name varchar2(36) not null,classid number references class(id));
特别说明:froeign key外键的细节
- 外键指向主键列;
- 外键可以指向unique列;
- 建表时先建主表,再建从表;删除表先删从表,再删主表。
- 外键列属性值要与主键或unique列属性值一致
- 外键列的值,一定要在主键列中存在。但外键列的值允许为null
6、check(检查)
用于强迫行数据一定要满足某个条件,假定在sal列上定义了check束缚,并要求sal列值在1000⑵000之间,如果不再这个条件范围内就会提示出错。
insert into user4 values(1,1000,’男’);//sal列的值不满足1000至2000,报错。
–ORA-02290: 违背检查束缚条件 (SCOTT.SYS_C0011178)
小贴士 : not null,default 只能在列内定义,其余四中束缚都可以在表内定义。列内定义:就是指在创建表的时候创建列在‘,’之前所写的。
二、列级定义与表级定义
1、列级定义
列级定义是在定义列的同时定义束缚。not null和default束缚只能在列级上定义。如在department表定义主键束缚:
name varchar2(12),
loc varchar2(12)
);
2、表级定义
基本语法:
表级定义是指在定义所有列后,再定义束缚,这里需要注意。一般情况下,我们使用列级定义便可。但是如果遇到定义复合主键(两列一起被定义为主键)时,需要用到表级定义。 以在建立employee2表时定义主键束缚和外键束缚为例
constraint pk_employee primary key (emp_id),// constraint指明束缚,pk_employee表示自己定义的束缚名
constraint fk_department foreign key (dept_id) references department4(dept_id)
);
三、束缚保护
1、增加束缚
如果在建表时,忘记建立必要的束缚,则可以在建表后使用alter table命令为表增加束缚,但是要注意:增加not null束缚时,需要使用modify选项,而增加其他四种束缚使用add选项。
alter table customer add constraint cardunique unique(cardID); ///add constraint表示增加束缚,后面跟束缚的名字
alter table customer add constraint addresscheck check (address in (‘海淀’,’朝阳’,’东城’,’西城’,’通州’,’崇文’));
2、删除束缚:
当不再需要某个束缚时,可以删除。
特别说明一下:在删除主键束缚的时候,可能有毛病,比如:
这是由于如果在两张表存在主从关系,那末在删除主表的主键束缚时,一定要带上cascade选项。如像:
3、显示束缚信息
1)显示束缚信息
通过查询数据字典视图user_constraints,可以显示当前用户所有的束缚信息。
2)显示束缚列
通过查询数据字典视图user_cons_columns,可以显示束缚所对应的表列信息
4、改变束缚状态
5、重命名束缚
6、变更束缚履行时间(会不会延缓履行,只对可延缓束缚有效)
–或
SET CONSTRAINTS xxx DEFERRED; –延缓
到此这篇关于Oracle束缚的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
文章来源:丸子建站
文章标题:ORACLE开发:Oracle的束缚介绍与束缚保护
https://www.wanzijz.com/view/67558.html