Oracle约束操作
Oracle约束操作约束是在表中定义的用于维护数据库完整性的一些规则。通过为表中的字段定义约束,可以防止将错误的数据插入到表中。注意:1.如果某个约束只作用于单独的字段,既可以在字段级定义约束,也可以在表级定义约束;但如果某个约束将作用于多个字段,必须在表级定义约束。2.oracle中的约束通过名称来进行识别。在定义约束时可以通过constraint关键字为约束命名。如果用户没有为约束指定名称,oracle将自动为约束建立默认的名称。主键约束(primary key):主键约束的特点:定义为主键约束的字段中不能包含任何重复值,并且不能包含null值。同1个表中只能定义1个主键约束。可以为一个字段定义主键约束,也可以为多个字段的组合定义主键约束。oracle会自动为具有主键约束的字段建立1个唯一索引和1个非空约束。例如:create table person(p_id int primary key, --定义该字段为主键约束p_name varchar2(20),p_age int--constraint p_pk primary key (p1_id));create table person(p_id int constraint p_pk primary key, --定义该字段为主键约束,并指定约束名字p_name varchar2(20),p_age int--constraint p_pk primary key (p1_id));create table person(p_id int,p_name varchar2(20),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 varchar2(20) not null, --定义该列的非空约束p_age int);唯一约束(unique):唯一约束的特点:定义了唯一约束的字段中不能包含重复值。可以为1个字段定义唯一约束,也可以为多个字段的组合定义唯一约束。因此,唯一约束既可以定义在字段级,也可以定义在表级。oracle会自动为具有唯一约束的字段建立1个唯一索引。对同一字段可以同时定义非空和唯一约束。如果在1个字段上仅定义了唯一约束,而没有定义非空约束,则该字段可以包含多个null值。例如:create table person(p_id int,p_name varchar2(20) unique,--定义该列的唯一约束p_age int);create table person(p_id int,p_name varchar2(20) constraint p_un unique not null, --同时定义唯一和非空约束p_age int);create table person(p_id int,p_name varchar2(20),p_age int,constraint p_un unique(p_name) --指定约束名字);外键约束(foreign key)外键约束的特点:定义为外键约束的字段中只能包含相应的其他表中引用字段的值或null值。可以为1个字段定义外键约束,也可以为多个字段的组合定义外键约束。定义了外键约束的字段和相应的引用字段可以存在于同1个表中,称为自引用。对同1个字段可以同时定义外键和非空约束。主表中的被引用列,必须有主键约束或唯一约束。例如:create table person(p_id int,p_name varchar2(20),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 varchar2(20),p_age int,w_id int constraint p_fk references works-- 外键约束,引用works表中的主键);create table person(p_id int,p_name varchar2(20),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 varchar2(20),p_age int check(p_age > 20) --检查约束-- constraint p_check check(p_age > 20) --检查约束);create table person(p_id int,p_name varchar2(20),p_age int constraint p_check check(p_age > 20) --检查约束-- constraint p_check check(p_age > 20) --检查约束);增加约束如果增加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 defe上一个:[每日一题] 11gOCP 1z0-052 :2013-08-30差异的增量备份
下一个:【每日一摩斯】-Shared Pool优化和Library Cache Latch冲突优化 (1523934.1)-系列2
- 更多Oracle疑问解答:
- 运行exp备份oracle数据库提示oracle-12154错误
- 有没有,生产Oracle Rman 备份脚本的工具啊!
- 初学orcle,希望有大大帮忙解说一下详细步骤,从登录oracle到创建表的过程
- oracle语句问题:一张user表,三个字段,id,name,time,插入记录比如:张三2007,李四2008,张三2011
- 如何写一个ORACLE触发器同步两个表中的数据?
- oracle 如何查看一个服务器上有多少个数据库.
- oracle 创建包的时候错误 求解
- oracle 重复列的问题
- oracle 中如何查处2星期前的数据
- 请教oracle数据库安装中的问题
- 请问谁能提供给我标准的oracle ERP的数据库表结构并详细说明各表主要的作用?
- 安装oracle遇到的问题 invalid entry CRC (expected 0x3e12e795 but got 0x9db0e9fd)
- 我的是ORACLE 10G,在RMAN中如何按指定的时间恢复数据文件啊?
- oracle为什么没有自动增长列
- oracle快捷键都有哪些啊?