知识大全 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的索引和约束详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle的约束*
管理Oracle约束与分区表 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! .约束 作用 约
小议Oracle外键约束修改行为(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracl
Oracle数据库中违反唯一约束的处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 根据NUL
Oracle外键的相关约束中级联删除的方案 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SQL
(1)严格掌握应用指征,注意维护病人自尊。 (2)向病人及家属说明使用约束具的目的、操作要领和主要注意事项,以取得理解和配合,并使之获得约束具应用的有关知识。 (3)约束具只能短期使用,并定时松解
Oracle的操作系统身份认证 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle的操作
Oracle恢复误操作的表 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle会把被删除
Oracle更新操作优化 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 首先描述一下更新的要求根
Oracle中对时间操作的一些总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle中