博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转载:oracle添加约束禁用延迟
阅读量:6242 次
发布时间:2019-06-22

本文共 2167 字,大约阅读时间需要 7 分钟。

添加NOT NULL约束

alter table tb_name

modity column_name constraint nt_name not null;

需要注意的是,添加NOT NULL约束并不使得add constraint语句,而是使用modify。

添加FOREIGN KEY约束

alter table tb_name1

add constraint fk_name

foreign key (column_name1) references tb_name2(column_name2);

在添加外键时,若在最后添加关键字on delete cascade,则在父表中删除一行记录时,子表中匹配的所有行也都将被删除。若添加关键字on delete set null则在父表删除一行记录时,子表中外键将被设置为空值。若添加关键字on delete no action则在父表删除一行记录时,子表中外键不做任何处理。

添加PRIMARY KEY约束

alter table tb_name

add constraint uk_name primary key (column_name);

添加CHECK约束

alter table tb_name

add constraint ck_name check (column_condition);

一般情况下,在添加一个约束时,表中现有的所有行都必须满足这个约束条件。然而,如果在最初添加约束时可以禁用约束并可以通过指定ENABLE NOVALIDATE选项来让约束只适用于新添加的数据。

添加UNIQUE约束

alter table tb_name

add constraint uq_name unique(column_name);

删除约束

alter table tb_name

drop constraint 约束名;

在删除主键约束时,若存在主外键关系,则必须加cascade关键字。

alter table tb_name

drop constraint primary key cascade;

删除约束时,默认将同时删除约束所对应的索引,如果要保留索引,用KEEP INDEX关键字。

alter table tb_name

drop primary key keep index;

重命名约束

alter table tb_name

rename constraint 约束名1 to 约束名2;

可用于将某些当初未命名而被Oracle自动命名的约束更名为自己想要的约束名。

禁用约束

alter table tb_name

disable constraint 约束名;

在禁用主键时,如果没有cascade关键字可能会造成外键的引用不一致性而出错,此时应该使用CASCADE子句DISABLE主键,这样可以将该主键与相关外键一起DISABLE掉。

alter table tb_name

disable primary key cascade;

例如在数据库系统中大规模装入数据时,为了系统的效率不得不牺牲数据的一致性来关闭一些约束,甚至删除一些约束将主表主键禁止的同时,也将禁止依赖于此主键的外键禁止。

使用禁用约束时会删除索引(主键+唯一),而启用约束时会重建索引,这对于大表开销极大。所以,可以在禁用约束时不删除索引,使用关键字keep,如:

alter table tb_name

disable constraint 约束名 keep index;

在删除约束时,可以使用关键字validate验证现有数据是否符合约束条件。需要注意的是之后不能对该表进行DML操作,如:

alter table tb_name

disable validate constraint 约束名;.

也可以使用关键字novalidate不验证现有数据(默认,省略即为不验证),如:

alter table tb_name

disable novalidate constraint 约束名;

启用约束

alter table tb_name

enable constraint 约束名;

如果关闭主键约束时使用了CASCADE,此时使用ENABLE不会将主键约束与外键约束同时打开,只能先对主键约束,后对外键约束使用ENABLE CONSTRAINT 子句打开。

启用约束时可以设置是否验证现有数据,在enable后添加关键字novalidate则不验证现有数据,validate则验证现有数据(默认,省略即为验证)。如:

alter table tb_name

enable novalidate constraint 约束名;

约束延迟

约束延迟指在事务提交时再验证,默认为不延迟。

开启约束延迟:set constraint 约束名 deferred;

关闭约束延迟:set constraint 约束名 immediate;

声明:该笔记转载自《Oracle Database 11g SQL开发指南》,仅用于个人学习,若侵犯到您的版权敬请告知!

转载于:https://www.cnblogs.com/anzhi/p/7568320.html

你可能感兴趣的文章
Run ASP.NET MVC site on mac (mono/xamarin studio)
查看>>
win8.1安装驱动出现“文件的哈希值不在指定的目录”的解决办法[zz]
查看>>
CRM 常用SQL 脚本
查看>>
备忘录--关于线程和IO知识
查看>>
【iCore3 双核心板】例程八:定时器PWM实验——呼吸灯
查看>>
jquery tmpl 详解
查看>>
docker学习笔记4:利用docker hub上的mysql镜像创建mysql容器
查看>>
【Xamarin开发 Android 系列 3】循序渐进的学习顺序
查看>>
自定义列表dl的使用原因和场合
查看>>
Oracle11G 卸载步骤
查看>>
PHP递归生成树形数组
查看>>
学习RSA公开密钥算法
查看>>
教你摆脱低级程序猿 项目中cocopads的安装使用
查看>>
禁止火狐浏览器缓存input标签方法
查看>>
[ilink32 Error] Error: Unresolved external '__fastcall Data::Win::Adodb::TCustomADODataSet
查看>>
.NET Core:面向未来的开源跨平台开发技术
查看>>
常用正则表达式
查看>>
超大批量删除redis中无用key+配置
查看>>
guid正则表达
查看>>
Javascript的this用法
查看>>