承接国内外服务器租用托管、定制开发、网站代运营、网站seo优化托管接单、网站代更新,新老站点皆可!!咨询QQ:3787320601

ORACLE开发:Oracle的束缚介绍与束缚保护

管理员 2023-07-28 07:58:51 互联网圈 0 ℃ 0 评论 8447字 收藏

ORACLE开发:Oracle的束缚介绍与束缚保护

数据的完全性用于确保数据库数据遵从一定的商业的逻辑规则。在oracle中,数据完全性可使用束缚、触发器、利用程序(进程、函数)三种方法来实现,在这三种方法中,由于束缚易于保护,并且具有最好的性能,所以作为保护数据完全性的首选。

一、甚么是束缚?

束缚用于确保数据库数据满足特定的商业规则。

二、束缚分类

1、not null(非空)

如果在列上定义了not null,那末当插入数据时,一定要为列提供数据。

create table user1(id number,name varchar2(30) not null);
insert into user1 values(001,”);//会报错
–ORA-01400: 没法将 NULL 插入 (“SCOTT”.”USER1″.”NAME”)

2、default(默许)

插入null值时,提供默许值。

create table yg (编号 number ,姓名 varchar2(10), 基本工资 number(8,2) default 1000)
— 默许值的插入方法
insert into yg values(1,’A’,default);
insert into yg (编号,姓名)values(1,’A’);

3、unique(唯一)

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

create table user2(id number unique,name varchar2(30));
insert into user2 values(1,111);//id输入重复的值是会报错
–ORA-00001: 违背唯一束缚条件 (SCOTT.SYS_C0011172)

注意:oracle中unique可以为null,而且允许多行动null

4、primary key(主键)

用于唯一的标识表行的数据,当定义主键束缚后,该列不但不能重复,而且不能为null。需要说明的是:一张表最多只能有一个主键,但是可以有多个unique束缚。

create table user3(id number primary key,name varchar2(30));
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 class(id number primary key,name varchar2(32));
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之间,如果不再这个条件范围内就会提示出错。

create table user4(id number primary key,sal number check(sal>=1000 and sal<=2000),sex char(2) check(sex in(‘男’,’女’)));
insert into user4 values(1,1000,’男’);//sal列的值不满足1000至2000,报错。
–ORA-02290: 违背检查束缚条件 (SCOTT.SYS_C0011178)

小贴士 : not null,default 只能在列内定义,其余四中束缚都可以在表内定义。列内定义:就是指在创建表的时候创建列在‘,’之前所写的。

二、列级定义与表级定义

1、列级定义

列级定义是在定义列的同时定义束缚。not null和default束缚只能在列级上定义。如在department表定义主键束缚:

create table department4(dept_id number(2) constraint pk_department primary key,// constraint指明束缚,pk_employee表示自己定义的束缚名
name varchar2(12),
loc varchar2(12)
);

2、表级定义

基本语法:

create table 表名(字段名 字段类型,…,constraint 束缚名称 束缚条件(字段),束缚条件(字段2),..);

表级定义是指在定义所有列后,再定义束缚,这里需要注意。一般情况下,我们使用列级定义便可。但是如果遇到定义复合主键(两列一起被定义为主键)时,需要用到表级定义。 以在建立employee2表时定义主键束缚和外键束缚为例

create table employee2(emp_id number(4),name varchar2(15),dept_id number(2),
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 goods modify goodsName not null

alter table customer add constraint cardunique unique(cardID); ///add constraint表示增加束缚,后面跟束缚的名字

alter table customer add constraint addresscheck check (address in (‘海淀’,’朝阳’,’东城’,’西城’,’通州’,’崇文’));

2、删除束缚:

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

alter table 表名 drop constraint 束缚名称;

特别说明一下:在删除主键束缚的时候,可能有毛病,比如:

alter table 表名 drop constraint primary key;

这是由于如果在两张表存在主从关系,那末在删除主表的主键束缚时,一定要带上cascade选项。如像:

alter table 表名 drop constraint primary key cascade;

3、显示束缚信息

1)显示束缚信息

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

Select constraint_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=’束缚名’;

4、改变束缚状态

ALTER TABLE xxx.yyy ENABLE|DISABLE VALIDATE|NOVALIDATE CONSTRAINT ccc;

5、重命名束缚

ALTER TABLE xxx.yyy RENAME CONSTRAINT ccc TO ccc_new;

6、变更束缚履行时间(会不会延缓履行,只对可延缓束缚有效)

SET CONSTRAINTS xxx IMMEDIATE; –立即
–或
SET CONSTRAINTS xxx DEFERRED; –延缓

到此这篇关于Oracle束缚的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。

文章来源:丸子建站

文章标题:ORACLE开发:Oracle的束缚介绍与束缚保护

https://www.wanzijz.com/view/67558.html

X

截屏,微信识别二维码

微信号:weimawl

(点击微信号复制,添加好友)

打开微信