Oracle约数,oracle 约束

约束

■给约束改为中文名■

alter table 表名 rename constraint 旧名字 to "新名字(中文)";

一.主键约束

1.为什么要用主键约束

(1)防止出现重复数据

(2)检索有利

(3)支持外键

2.主键约束简介

(1)主键列的数据类型不一定是数值型

(2)主键不一定只有一列

(3)大多数时候是单列主键[1.单列主键只需一个搜索条件,2.各个候选码的属性之间不能存在函数依赖]

(4)自增的数值型主键最受欢迎

(5)主键不能为空

3.创建主键约束

(1)创建表的时候定义主键约束   primary key

eg.create table a (a_no number primary key,a_name varchar2(2));

create table a (a_no number,a_name varchar2(20),primary key(a_no,a_name));

(2)查看主键约束

select table_name,constraint_name,constraint_type,status from user_constraints;

除了数据字典user_constraints之外,还可以通过user_cons_columns查看主键被建在那些列上面.

select constraint_name,table_name,column_name from user_cons_columns where constrain_name='约束名';

(3)创建表后,添加主键

alter table add primary key(列1,列2,...);

4.修改主键约束

(1)禁用/启用主键

禁用:alter table 表名 disable primary key;

启用:alter table 表名 enable primary key;

在启用主键约束时,oracle会检查数据是否违反主键约束,如果违反,那么主键的启用也将失败.

(2)重命名主键

alter table 表名 rename constraint 原主键名称 to 新主键名称;

(3)删除主键

alter table 表名 drop constraint 约束名;

5.主键与索引

(1)当oracle创建主键时,会自动创建一个与主键同名的索引.

select table_name,index_name,index_type from user_indexes;

(2)索引列于主键列相同.

查询索引语句:select index_name,table_name,column_name from user_ind_columns;

(3)当用户重命名主键以后,索引并不会随之重命名.

(4)索引会随着主键的删除而被删除.

(5)当oracle创建主键时,会先查看主键列是否创建了索引,如果未创建,则会自动创建;如果已创建,oracle只会创建主键,不会进行索引创建.已存在的索引与主键没连带关系,即删除主键索引依然存在.

二.外键约束

1.为什么要用外键约束

(1)参照完整性

在两个表之间,一个表的记录依附于另一个表的记录而存在,称为表之间的参照完整性

(2)外键的必要性[减少错误]

2.外键约束简介

一个数据表有自己的主键,而向外部其他数据表的引用,称为外键.外键实际银行了对外部引用的限制,必须获得外部数据表的唯一记录.

订单表中的数据,必须依附于客户表产生数据的存在而存在,所以订单表被称为从表,客户表被称为主表.

3.创建外键约束

(1)创建外键约束

alter table 表名 add constraint 约束名 foreign key(外键列名) references 主表(主表主键列);

(2)查看外键信息

select table_name,constraint_name,constraint_type,r_constraint_name from user_constraints;

4.级联更新与级联删除

主表的操作,将连带影响到从表的操作,这就是级联更新与级联删除问题的提出背景.

(1)级联更新

alter table 表名 add constraint 约束名 foreign key(外键列名) references 主表(主表主键列) deferrable initially deferred;

其中,deferrable initially deferred表示新建约束使用了延迟校验机制,默认为即时校验.即时校验是指,当oracle执行了一条sql语句,立即验证这条语句是否仍能保持数据完整性;而延时校验是指,当整个事物结束时,才验证数据完整性.

因此,可以先修改主表数据,然后再修改从表数据,保证二者的统一性,当执行commit以后,事物结束.

更新事物提交时,将验证数据完整性,如果无法通过校验,那么事物回滚.

(2)级联删除

alter table 表名 add constraint 约束名 foreign key(外键列名) references 主表(主表主键列) on delete cascade;

其中,on delete cascade指定外键采用级联删除机制.此处的级联是指,当用户删除主表中的某条记录时,oracle会自动搜索并删除从表中的相关记录[即时删除].

5.外键约束的相关操作

(1)重命名

alter table 表名 rename constraint 原外键名称 to 新外键名称

(2)禁用,启用

alter table 表名 disable/enable constraint 外键名;

(3)不校验已有数据的完整性

alter table 表名 enable novalidate constraint 外交名;

(4)删除外交

alter table 表名 drop constraint 外键名;

三.唯一性约束

1.唯一性约束简介

(1)唯一性约束和主键的相同点

①唯一性约束和主键都可以限制表中记录的唯一性

②唯一性约束和主键都可以建立在单列或列的组合上

(2)唯一性约束和主键的不同点

①表中允许的个数不同.在一个表中,主键是唯一的,而唯一性约束没有数量上的限制

②唯一性约束的列值允许空值

③唯一性约束创建时不会连带创建索引

2.创建唯一性约束

(1)创建唯一性约束

alter table 表名 add constraint 约束名 unique(列名1,列名2,...);

(2)查询唯一性约束的详细信息

select table_name,constraint_name,constraint_type from user_constraints;

唯一性约束的列信息:

select constraint_name,table_name,column_name from user_cons_columns;

3.修改唯一性约束

(1)删除唯一性约束

alter table 表名 drop constraint 约束名;

(2)重命名

altre table 表名 rename constraint 旧名 to 新名;

(3)禁用/启用

alter table 表名 disable/enable constraint 约束名;

4.总结

唯一性约束可以建立在列或列的组合上,可以作为主键约束的补充.最常见的使用场景是:主键建立在与实际业务无关的列上,而业务逻辑上保证记录的唯一性往往使用唯一性约束.

四.检查约束

1.检查约束简介

检查约束的实质是一个布尔表达式,一旦在数据表上创建了检查约束,那么该检查约束将在数据更新时计算布尔表达式的值,如果结果为真,则校验通过,并成功更新数据,否则,oracle将禁止数据的更新操作.

2.创建检查约束

(1)创建检查约束

alter table 表名 add constraint 约束名  check(布尔表达式)

(2)查询检查约束的详细信息

select table_name,constraint_name,constraint_type,search_condition from user_constraints;

五.默认值约束

1.创建默认值约束

(1)创建默认值

alter table 表名 modify 列名 default 默认值;

(2)查看默认值约束信息

select table_name,column_name,data_type,data_length,data_default from user_tab_columns;

2.修改默认值约束

alter table 表名 modify(列1 default 默认值1,列2 default 默认值2);

六.非空约束

1.创建非空约束

(1)创建非空约束

create table 表名 modify (列名 not null);

(2)查看非空约束

select table_name,column_name,data_type,nullable from user_tab_columns;

2.修改非空约束

alter table 表名 modify (列名 null);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值