Oracle constraint 约束

1.        主键创建(primarykey):

alter table tableName add constraint pk_tableName_id primarykey (id);

 

2.        外键创建(foreignkey):

alter table tableName

  add constraint f_tableName_kid foreignkey  (kid)

  references tableName_source (id) on delete cascade;

 

3.        条件(check)

alter table tableName add constraint C_tableName_ID check (id>5)

deferrable initially deferred;

 

4.        修改constraint 的语句

先删除,再创建alter table tableName drop constraint F_TABLENAME_KID;删除)

直接修改 alter tabletableName modify constraint F_TABLENAME_KID initially immediate;

设置有效无效alter table tableName disable constraint F_TABLENAME_KID;

              alter table tableName enable no validate constraint F_TABLENAME_KID

 

5.        说明:

tableName:创建外键的数据表

      f_tableName_kid:外键的名称

      foreignkey    :外键

      kid              创建外键的数据表的字段(关联原始表的某个字段)

      tableName_source:原始表的名称

      id                 :原始表的某个字段

on delete cascade:当父表中的列被删除时,子表中相对应的列也被删除(整个数据条也删除)

ON DELETE SET NULL:父表中列被删除,子表中相应的列置空(只是数据条的对应的外键列为空值)

On no action          :默认不操作(子表列删除,父表才可以表删除)

 

Deferrable(约束应用可以延迟: 默认值为not deferrable,字面含义是不可延迟

Deferred(是否进行延迟应用)默认值为不延迟,要和Deferrable一起使用

语句:deferrable initially deferred 为commit前,不会报错。

结论:单独deferrable的含义就是是否允许约束检查延后进行。单独设置deferrabledeferrable之后,约束检查延后是不可以直接使用的,要配合deferred参数,如果该参数是immediate,那么约束还是在DML的时候进行应用。如果deferred参数设置为deferred,约束就是在事务commit提交的时候应用,出现错误就连带回滚rollback整个事务。


语句写法(参考别人)

1.删除约束
alter table table_name drop constraint constraint_name;
2.创建主键
alter table table_name add constraint constraint_name primary key(column_name1,column_name2);
3.创建唯一约束
alter table table_name add constraint constraint_name unique(column_name1,column_name2);
4.创建外键约束
alter table table_name1 add constraint constraint_name foreign key(column_name1) references table_name2(column_name1);
enable/disable:约束/不约束新数据
novalidate/validate:不对/对老数据进行验证
alter table table_name add constraint constraint_name check(column_name like 'B%') enable/disable novalidate/validate;
5.修改约束条件,延时验证,commit时验证
alter table table_name modify constraint constraint_name initially deferred;
6.修改约束条件,立即验证
alter table table_name modify constraint constraint_name initially immediate;
7.设置约束延迟/立即验证
alter session set constraints=deferred/immediate;
8.删除表时删除约束
drop一个有外键的主键表,带cascade constraints参数级联删除
drop table table_name cascade constraints;
9.当truncate外键表时,先将外键设为无效,再truncate;
truncate table table_name;
设约束条件无效
alter table table_name disable constraint constraint_name;
alter table table_name enable novalidate constraint constraint_name;


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值