知识大全 Oracle约束操作

Posted

篇首语:带不走四季的风,就卷走一路的风景;遇不到心动的人,就孤身潇洒走四方。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle约束操作相关的知识,希望对你有一定的参考价值。

Oracle约束操作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Oracle约束操作

  约束是在表中定义的用于维护数据库完整性的一些规则 通过为表中的字段定义约束 可以防止将错误的数据插入到表中

  注意

   如果某个约束只作用于单独的字段 既可以在字段级定义约束 也可以在表级定义约束;但如果某个约束将作用于多个字段 必须在表级定义约束

   oracle中的约束通过名称来进行识别 在定义约束时可以通过constraint关键字为约束命名 如果用户没有为约束指定名称 oracle将自动为约束建立默认的名称

  主键约束(primary key)

  主键约束的特点

  定义为主键约束的字段中不能包含任何重复值 并且不能包含null值

  同 个表中只能定义 个主键约束

  可以为一个字段定义主键约束 也可以为多个字段的组合定义主键约束

  oracle会自动为具有主键约束的字段建立 个唯一索引和 个非空约束

  例如

  create table person

  (

  p_id int primary key 定义该字段为主键约束

  p_name varchar ( )

  p_age int

   constraint p_pk primary key (p _id)

  );

  create table person

  (

  p_id int constraint p_pk primary key 定义该字段为主键约束 并指定约束名字

  p_name varchar ( )

  p_age int

   constraint p_pk primary key (p _id)

  );

  create table person

  (

  p_id int

  p_name varchar ( )

  p_age int

  constraint p_pk primary key (p_id p_name) 定义复合主键 并指定名字

   primary key(p_id p_name)

  );

  非空约束(not null)

  非空约束的特点

  定义了非空约束的字段中不能包含null值

  只能在字段级定义非空约束

  在同一个表中可以定义多个非空约束

  例如

  create table person

  (

  p_id int

  p_name varchar ( ) not null 定义该列的非空约束

  p_age int

  );

  唯一约束(unique):

  唯一约束的特点

  定义了唯一约束的字段中不能包含重复值

  可以为 个字段定义唯一约束 也可以为多个字段的组合定义唯一约束 因此 唯一约束既可以定义在字段级 也可以定义在表级

  oracle会自动为具有唯一约束的字段建立 个唯一索引

  对同一字段可以同时定义非空和唯一约束

  如果在 个字段上仅定义了唯一约束 而没有定义非空约束 则该字段可以包含多个null值

  例如

  create table person

  (

  p_id int

  p_name varchar ( ) unique 定义该列的唯一约束

  p_age int

  );

  create table person

  (

  p_id int

  p_name varchar ( ) constraint p_un unique not null 同时定义唯一和非空约束

  p_age int

  );

  create table person

  (

  p_id int

  p_name varchar ( )

  p_age int

  constraint p_un unique(p_name) 指定约束名字

  );

  外键约束(foreign key)

  外键约束的特点

  定义为外键约束的字段中只能包含相应的其他表中引用字段的值或null值

  可以为 个字段定义外键约束 也可以为多个字段的组合定义外键约束

  定义了外键约束的字段和相应的引用字段可以存在于同 个表中 称为自引用

  对同 个字段可以同时定义外键和非空约束

  主表中的被引用列 必须有主键约束或唯一约束

  例如

  create table person

  (

  p_id int

  p_name varchar ( )

  p_age int

  w_id int

  constraint p_fk foreign key (w_id) references works(w_id) 外键约束

  );

  create table person

  (

  p_id int

  p_name varchar ( )

  p_age int

  w_id int constraint p_fk references works 外键约束 引用works表中的主键

  );

  create table person

  (

  p_id int

  p_name varchar ( )

  p_age int

  w_id int references works 外键约束

   w_id int constraint w_fk references works(w_id)

  );

  在定义外键约束时 还可以通过on关键字来指定引用行为的类型 当主表中的一条记录被删除时 需要通过引用行为来确定如何处理子表中的外键列的值

  删除子表中所有相关的记录(delete cascade)

  将所有相关记录的外键值设置为null(delete set null)

  检查约束(check)

  检查约束的特点

  在检查约束的表达式中必须引用到表中的一个或多个字段 并且表达式的计算结果必须是一个布尔值

  在表达式中不能包含子查询

  在表达式中不能包含sysdate uid user userenv等sql函数 也不能包含rowid rownum等伪列

  检查约束可以在字段级和表级定义

  对同一个字段可以定义多个检查约束 而且对同一个字段可以同时定义检查约束和非空约束

  例如

  create table person

  (

  p_id int

  p_name varchar ( )

  p_age int check(p_age > ) 检查约束

   constraint p_check check(p_age > ) 检查约束

  );

  create table person

  (

  p_id int

  p_name varchar ( )

  p_age int constraint p_check check(p_age > ) 检查约束

   constraint p_check check(p_age > ) 检查约束

  );

  增加约束

  如果增加UNIQUE PRIMARY KEY FOREIGN KEY 和CKECK 必须使用ALTER TABLE语句的ADD子句;

  如果增加NOT NULL约束 那么必须使用ALTER TABLE语句的MODIFY子句 如

  ALTER TABLE table_name ADD [CONSTRAINT constraint_name]

  constraint_type (column )

  ALTER TABLE table_name MODIFY column

  [CONSTRAINT constraint_name] NOT NULL;

  添加外键约束

  alter table emp add foreign key (deptno) references dept(deptno);

  alter table emp add constraint d_fk foreign key (deptno) references dept(deptno);

  添加主键约束

  alter table table_name add primary key(column_name);

  alter table table_name add constraint t_pk primary key(column_name);

  添加非空约束

  alter table person modify p_name not null;

  alter table person modify p_name constraint t_notnull not null;

  约束延迟(在事务提交时再验证 默认为不延迟)

  deferrable 延迟验证

  not deferrable 不延迟验证(默认)

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

  创建约束时 可指定开启延迟

  create table tt

  (

  id int primary key deferrable initially deferred

  );

  set constraints 约束名 immediate; 关闭约束延迟

  set constraints 约束名 deferred; 开启约束延迟

  也可以在session级设置

  alter session set constraints=immediate;

  alter session set constraints=deferred;

  重命名约束

  alter table 表名 rename constraint 原约束名 to 新约束名

  删除约束

  alter table 表名 drop constraint 约束名;

  alter table 表名 drop constraint 约束名 cascade; &# ; 删除主键时级联删除子表的外键约束

  约束失效

  alter table 表名 disable constraint 约束名

  alter table 表名 disable constraint 约束名cascade; 失效主键时级联删除子表的外键约束

  约束生效

  alter table 表名 enable constraint 约束名

  novalidate: 不验证老数据

  validate 验证老数据

  控制现有数据是否应用约束 例如

  alter table t deferrable enable novalidate constraint SYS_C ; 约束生效 不验证已有数据是否符合约束条件

  alter table t enable validate constraint SYS_C ; 约束生效 同时验证已有数据是否符合约束条件

  alter table t disable validate constraint SYS_C ;

   约束失效 同时验证已有数据是否符合约束条件 之后不能对该表进行dml操作 否则会报ORA 错误

  alter table t disable novalidate constraint SYS_C ;

   约束失效 不验证已有数据是否符合约束条件(默认)

  注 约束生效(enable)后的操作都受约束的限制

  查询约束信息

  视图名字 描述

  all_constraints 包含所有的约束基本描述信息 包括约束的名字 类型 状态 延迟性等信息

  dba_constraints

  user_constraints

  all_cons_columns 包含定义课约束的字段信息 利用这个视图可以查看约束定义在哪些字段上

  dba_cons_columns

cha138/Article/program/Oracle/201311/17214

相关参考

知识大全 ORACLE的索引和约束详解

ORACLE的索引和约束详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle的约束*

知识大全 管理Oracle约束与分区表

管理Oracle约束与分区表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  .约束  作用  约

知识大全 小议Oracle外键约束修改行为(一)

小议Oracle外键约束修改行为(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracl

知识大全 Oracle数据库中违反唯一约束的处理

Oracle数据库中违反唯一约束的处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  根据NUL

知识大全 Oracle外键的相关约束中级联删除的方案

Oracle外键的相关约束中级联删除的方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  SQL

使用约束具时应注意哪些事项?

(1)严格掌握应用指征,注意维护病人自尊。  (2)向病人及家属说明使用约束具的目的、操作要领和主要注意事项,以取得理解和配合,并使之获得约束具应用的有关知识。  (3)约束具只能短期使用,并定时松解

知识大全 Oracle的操作系统身份认证

Oracle的操作系统身份认证  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle的操作

知识大全 Oracle恢复误操作的表

Oracle恢复误操作的表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle会把被删除

知识大全 Oracle更新操作优化

Oracle更新操作优化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  首先描述一下更新的要求根

知识大全 Oracle中对时间操作的一些总结

Oracle中对时间操作的一些总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle中