`

oracle constraint

sql 
阅读更多
原文地址: http://www.cnblogs.com/ljcbest/archive/2010/09/02/1816346.html

约束简介
约束用于确保数据库数据满足特定的商业逻辑或者企业规则,如果定义了约束,并且数据不符

合约束,那么DML操作(INSERT、UPDATE、DELETE)将不能成功执行。约束包括NOT NULL、UNIQUE、PRIMARY KEY、FOREING KEY 以及CHECK等五种类型

定义约束
列级约束:
column [CONSTRAINT constraint_name] constraint_type
表级约束:
column ,...,
[CONSTRAINT constraint_name] constraint_type (column,...)

1.定义NOT NULL约束
NOT NULL 约束只能在列级定义,不能在表级定义
例:
CREATE TABLE emp01(
eno INT  NOT NULL,
name VARCHAR2(10) CONSTRAINT nn_name2 NOT NULL,
salary NUMBER(6,2)
);
上例中,eno列与name列上定义了NOT NULL约束,其中eno列的NOT NULL约束没有指定约束名,而

name列则指定了约束名nn_name。
可以通过查询user_constraints字典来查看所定义的约束,如:
SQL> select constraint_name,constraint_type from user_constraints
2  where table_name='EMP01';

CONSTRAINT_NAME                                              CO
------------------------------------------------------------ --
SYS_C0010618                                                 C
NN_NAME                                                      C
可见,没有给约束名的,系统将会自动的定义一个约束名称,其中约束类型中,P:表示主键,R:

表示外键,C表示NOT NULL或CHECK,U表示UNIQUE。且系统中同一方案下的的约束名不能重复



2.定义UNIQUE约束
定义了惟一约束之后,惟一约束列的列值不能重复,但可以为NULL。UNIQUE约束既可以在列级

定义,也可以在表级定义
例:
CREATE TABLE emp02(
eno INT UNIQUE,name VARCHAR2(10) CONSTRAINT u_name UNIQUE,
salary NUMBER(6,2)
);
同样,如果没有给出约束名,系统会自动定义一个名称,可从查询结果得出
SQL> select constraint_name,constraint_type from user_constraints
2  where table_name='EMP02';

CONSTRAINT_NAME                                              CO
------------------------------------------------------------ --
SYS_C0010623                                                 U
U_NAME
U

3.定义PRIMARY KEY 约束
当定义主键约束后,主键约束列的列值不仅不能重复,而且也不能为NULL。主键约束既可以在

列级定义,也可以在表级定义。一张表最多只能具有一个主键约束,当一个表中的多个列都要为

主键是,可以在表级定义。
例1:列级定义主键
CREATE TABLE depto04(
dno INT PRIMARY KEY,
dname VARCHAR2(10),loc VARCHAR2(20)
);
通过查询user_constraints可得出
SQL>  select constraint_name ,constraint_type from user_constraints
2  where table_name='DEPT04';

CONSTRAINT_NAME                                              CO
------------------------------------------------------------ --
SYS_C0010625                                                 P
通过查询user_cons_columns可得出
SQL> select constraint_name,column_name from user_cons_columns
2  where table_name='DEPT04';

CONSTRAINT_NAME                                              COLUMN_NAME
------------------------------------------------------------ ------------

SYS_C0010625                                                 DNO
例2:表级定义主键
CREATE TABLE dept05(
dno INT,
dname VARCHAR2(10),loc VARCHAR2(20),
PRIMARY KEY(dno,dname)
);
通过查询user_constraints可以得出
SQL> select constraint_name,constraint_type from user_constraints
2  where table_name='DEPT05';

CONSTRAINT_NAME                                              CO
------------------------------------------------------------ --
SYS_C0010626                                                 P
通过查询user_cons_columns可得出
SQL> select constraint_name,column_name from user_cons_columns
2  where table_name='DEPT05';

CONSTRAINT_NAME                                              COLUMN_NAME
------------------------------------------------------------ -------------

SYS_C0010626                                                 DNO
SYS_C0010626                                                 DNAME
可见,当在表级定义时,约束名称将会相同,而在user_cons_columns查询是,每一列将对应约束

名称相同的两条记录



4.定义FOREING KEY约束
当定义了外部键约束之后,要求外部键列的数据必须在主表的主键列(或惟一列)中存在,或

者为NULL,FOREING KEY约束既可以在列级定义,也可以在表级定义。
关键字说明:
FOREING KEY:该选项用于指定在表级定义外部键约束。当在表级定义外部键约束时必须指定该选

项,在列级定义外部键约束不需要指定该选项
REFERENCES:该选项用于指定主表名及其主键列。当定义外部键约束时,该选项必须指定。
ON DELETE CASCAED:该选项用于指定级联删除选项。如果在定义外部键约束时指定了该选项,那

么当删除主表数据时会级联删除从表的相关数据。
ON DELECT SET NULL:该选项用于指定转换相关的外部键值为NULL,如果在定义外部键约束时指定

了该选项,那么当删除主表数据时会将从表外部键列的数据设置为NULL。
例1:列级定义外键约束
CREATE TABLE emp04(
eno INT,name VARCHAR2(10),salary NUMBER(6,2),
dno INT CONSTRAINT fk_dno REFERENCES dept04(dno)
);
SQL> select constraint_name,constraint_type from user_constraints
2  where table_name='EMP04';

CONSTRAINT_NAME                                              CO
------------------------------------------------------------ --
FK_DNO                                                       R
SQL> select constraint_name,column_name from user_cons_columns
2  where table_name='EMP04';

CONSTRAINT_NAME                                              COLUMN_NAME
------------------------------------------------------------ -----------

FK_DNO                                                       DNO
例2:表级定义外键约束
CREATE TABLE emp05(
eno INT,name VARCHAR2(10),salary NUMBER(6,2),
dno INT,
CONSTRAINT fk_dno_name FOREIGN KEY(dno,name) REFERENCES dept05(dno,dname)
);
SQL> select constraint_name,constraint_type from user_constraints
2  where table_name='EMP05'
3  ;

CONSTRAINT_NAME                                              CO
------------------------------------------------------------ --
FK_DNO_NAME                                                  R
SQL> select constraint_name,column_name from user_cons_columns
2  where table_name='EMP05';

CONSTRAINT_NAME                                              COLUMN_NAME
------------------------------------------------------------ -----------

FK_DNO_NAME                                                  DNO
FK_DNO_NAME                                                  NAME

5.定义CHECK约束
CHECK约束既可以在列级定义,也可以在表级定义。CHECK约束允许列为NULL。
例:
CREATE TABLE emp06(
eno INT,name VARCHAR2(10),salary NUMBER(6,2),
CHECK (salary BETWEEN 1000 AND 5000)
);
SQL>  select constraint_name,constraint_type from user_constraints
2   where table_name='EMP06';

CONSTRAINT_NAME                                              CO
------------------------------------------------------------ --
SYS_C0010629                                                 C
SQL> select constraint_name,column_name from user_cons_columns
2  where table_name='EMP06';

CONSTRAINT_NAME                                              COLUMN_NAME
------------------------------------------------------------ -----------

SYS_C0010629                                                 SALARY

6.定义复合约束
复合约束即在表级定义,基于多列的复合约束,如:
CREATE TABLE dept05(
dno INT,
dname VARCHAR2(10),loc VARCHAR2(20),
PRIMARY KEY(dno,dname)
);或
CREATE TABLE emp05(
eno INT,name VARCHAR2(10),salary NUMBER(6,2),
dno INT,
CONSTRAINT fk_dno_name FOREIGN KEY(dno,name) REFERENCES dept05(dno,dname)
);



9.3维护约束
9.3.1增加约束
如果增加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;
9.3.2修改约束名
在同一个方案中,约束名必须惟一,并且约束名也不能与其他对象同名。当鱫IMPDP工具或者IMP

工具导入其他对象时,如发现有同名的对象,将会出错
语法:
ALTER TABLE table_name RENAME CONSTRAINT old_constraint_name
TO new_constraint_name;
例:
ALTER TABLE emp01 RENAME CONSTRAINT SYS_C005028
TO ck_emp01_salary;
9.3.3 删除约束
当删除特定表的主键约束时,如果该表具有相关的从表,那么在删除主键约束

时必须带有CASCAED选项
语法:
ALTER TABLE table_name DROP
CONSTRAINT constraint_name |PRIMARY KEY
例1
ALTER TABLE emp01 DROP CONSTRAINT ck_emp01_salary;
例2
ALTER TABLE dept01 DROP PRIMARY KEY CASCAED
9.3.4禁止约束
禁止约束指使约束临时失效。当禁止了约束之后,约束规则将不再生效。在使用SQL*LOADER或

INSERT装载数据之前,为了加快数据装载速度,应该首先禁止约束,然后装载数据。
语法:
ALTER TABLE table_name
DISABLE CONSTRAINT constaint_name [CASCAED];--CASCAED用于指定级联禁止从表的外部键

约束
例:
ALTER TABLE emp05 DISABLE CONSTAINT SYS_C00502;
9.3.5 激活约束
语法:
ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;
例:
ALTER TABLE emp05 ENABLE CONSTRAINT SYS_C005022;
9.4 显示约束信息
1.USER_CONSTRAINTS
2.USER_CONS_COLUMNS
分享到:
评论

相关推荐

    oracle constraint 约束

    NULL 博文链接:https://mxm910821.iteye.com/blog/1470589

    oracle约束和索引笔记

    自己看视频做的笔记,以后再更新,虽然内容很少,但是一看就懂。我也是菜鸟,所以笔记都是菜鸟笔记

    SQL实验六 Oracle数据字典和ODBC

    了解Oracle数据字典 ODBC 数据字典(data dictionary)是存储在数据库中的所有对象信息的知识库。Oracle RDBMS使用数据字典获取对象信息和安全信息,而用户和DBA用它来查阅数据库信息。数据字典是只读的,终端用户...

    oracle笔记 (创建、更改、删除[table,constraint,index,view,sequence])

    NULL 博文链接:https://snowelf.iteye.com/blog/494061

    Oracle的约束【Constraint】

    Oracle的Constraint约束,供初学者参考;

    Oracle约束基本语法 修改表结构

    NULL 博文链接:https://mlxnle.iteye.com/blog/1490247

    Oracle Configurator Constraint Definition Language Guide Release

    Oracle Configurator Constraint Definition Language Guide Release 11i

    关于sql脚本导入Oracle时重复生成check约束的问题解决

    主要给大家介绍了关于sql脚本导入Oracle时重复生成check约束的问题解决方法,文中给出了详细的检查步骤,对大家理解和解决这个问题具有很好的帮助,需要的朋友们下面来一起看看吧。

    Oracle数据库Constraint约束的常用操作及异常处理[归类].pdf

    Oracle数据库Constraint约束的常用操作及异常处理 Constraint约束是一种机制,用于确保数据库中的数据符合一定的规则和格式。在Oracle数据库中,Constraint约束可以分为多种类型,包括主键约束、唯一约束、检查约束...

    constraint约束.docx

    Oracle数据库constraint约束

    ORACLE Rename Table的语法

    SQL> ALTER TABLE pc59 RENAME CONSTRAINT SYS_C00421221 TO PK_PC59; Table altered SQL> ALTER INDEX SYS_C00421221 RENAME TO PK_PC59; Index altered 在 ORACLE 中,Rename 命令需要使用标准的数据库命令,否则...

    Oracle约束详解.pdf

    1 1 、 e oracle 数据库有 5 5 种约束: :y primary n key,foreign key,unique,...3 3 、 在定义约束时, , 可以通过关键字 t constraint 为约束命名, , 如果没有指定 , , e oracle 就为约束建立默认的名称。

    Oracle系统表查询

    CREATE TABLE tablename (column1 data type [constraint], column2 data type [constraint], column3 data type [constraint]); 在创建新表格时,在关键词CREATE TABLE后面加入所要建立的表格的名称,然后在括号内...

    从mysql转换到oracle数据库.docx

    10. 将 `CONSTRAINT 0_99 FOREIGN` 改成 `CONSTRAINT fk_99 FOREIGN`。 11. 将 `mediumblob` 转换成 `blob`。 12. 将所有非主键的 `not null` 去掉。 三、对数据修改 在将 MySQL 数据导出到 Oracle 数据库之前,...

    oracle_PLSQL_语法详细手册

    表是Oracle中最重要的数据库对象,表存储一些相似的数据集合,这些数据描述成若干列或字段.create table 语句的基本形式用来在数据库中创建容纳数据行的表.create table 语句的简单形式接收表名,列名,列数据类型和大小...

    最全的oracle常用命令大全.txt

    ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...

    Oracle日常运维常用命令速查手册

    Oracle 日常运维常用命令速查手册 Oracle 是一款功能强大且广泛应用的关系数据库管理系统,作为Oracle运维人员,熟悉常用的命令和语句是非常必要的。本文档汇总了 Oracle 日常运维中常用的命令和语句,包括登录 ...

    oracle 培训文档1

    oracle 1 基本对象 表(Table)和 视图(View) 索引(Index)和 约束(Constraint) 函数(Function) 过程(Procedure) 其他(同义词,序列,簇,job,等)

    MLDN李兴华老师的Oracle上课笔记

    在 Oracle 中,可以使用 CONSTRAINT 语句来设置约束。 9. 数据伪列的使用:数据伪列是指 Oracle 中的一种特殊的列,例如 ROWNUM 伪列、ROWID 伪列等。这些伪列可以用来对数据进行操作和查询。 10. SQL Developer ...

Global site tag (gtag.js) - Google Analytics