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);

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26918004/viewspace-752308/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26918004/viewspace-752308/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值