oracle 约束类别

约束:(什么叫约束)

概念:1.约束是表级强制执行的规则2.当表中数据有相互依赖性时,可保护数据不被删除

 

Oracle 有如下类型的约束:

NOT NULL—非空约束

UNIQUE Key—唯一性约束

PRIMARY KEY—主键约束

FOREIGN KEY—外键约束

Check-约束

 

约束概况:

Oracle使用 SYS_Cn 格式命名约束.

创建约束的方式-两种:

1.在建表的同时创建

2.建表后创建

可定义列级或表级约束.

可通过数据字典表查看约束

 

创建约束的方式:

CREATE TABLE [schema.]table

            (column datatype [DEFRAULT expr]

             [column_constraint],

            

[table_constraint];

)

语法格式:ALTER TABLE命令

ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束内容。

 

 

实例:

创建表的时候创建约束:

CREATE TABLE emp

(emptno NUMBER(4),

ename VARCHAR2(10),

 

deptno NUMBER(7,2) NOT NULL,

CONSTRAINT emp_empno_pk PRIMARY KEY (empno));

列级约束:

   Column [constraint constraint_name] constraint_type,

表级约束:

Column,…

[constraint constraint_name] constraint_type(column,…),

 

非空约束(not null)

定义列级约束:

SQL> CREATE TABLE emp(

empno NUMBER(4),

ename  VARCHAR2(10) NOT NULL,

job  VARCHAR2(9),

mgr  NUMBER(4),

hiredate DATE,

sal  NUMBER(7,2),

comm  NUMBER(7,2),

deptno  NUMBER(7,2) NOT NULL);

唯一性约束(unique)

SQL> CREATE TABLE dept(

deptno NUMBER(2),

dname  VARCHAR2(14),

loc  VARCHAR2(13),

CONSTRAINT dept_dname_uk UNIQUE(dname));

主键约束(PRIMARY KEY)

SQL> CREATE TABLE dept(

deptno NUMBER(2),

dname  VARCHAR2(14),

loc  VARCHAR2(13),

CONSTRAINT dept_dname_uk UNIQUE(dname),

CONSTRAINT dept_deptno_pk PRIMARY KEY(dept_no));

外键约束(FOREIGN KEY)

SQL> CREATE TABLE emp(

empno NUMBER(4),

ename  VARCHAR2(10) NOT NULL,

job  VARCHAR2(9),

mgr  NUMBER(4),

hiredate DATE,

sal  NUMBER(7,2),

comm  NUMBER(7,2),

deptno  NUMBER(7,2) NOT NULL,

CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)

REFERENCES dept (deptno));

外键约束的关键字

Foreign key :定义子表的哪一列作为外键的约束。

References:指示主表和参照的列

ON DELETE CASCADE:删除子表时将子表的相关记录删除

ON DELETE SET NULL:将外键引用置为空值

Check约束

定义每一记录都要满足的条件

条件表达式不允许有:currval,nextval,level,rownum

                   Sysdate,uid,user,userenv 函数

                   参照其他记录的值

        ..., deptno  NUMBER(2),

CONSTRAINT emp_deptno_ck

CHECK (DEPTNO BETWEEN 10 AND 99),...

加约束

可加或删除约束,但是不能修改

可以使约束生效和失效

使用modify子句可加not null约束

ALTER TABLE table

ADD [CONSTRAINT constraint] type (column);

实例:增加外键约束到EMP表

SQL> ALTER TABLE  emp

ADD CONSTRAINT emp_mgr_fk

FOREIGN KEY(mgr) REFERENCES emp(empno);

 

删除约束:

删除约束emp_mgr_fk

SQL> ALTER TABLE  emp

DROP CONSTRAINT emp_mgr_fk;

结果:Table altered.

删除主键约束和相关的外键约束.:

SQL> ALTER TABLE  dept

DROP PRIMARY KEY CASCADE;

使约束失效:

在ALTER TABLE 语句中执行DISABLE子句可使完整性约束失效

使用 CASCADE 选项可使依赖的完整约束失效

SQL> ALTER TABLE  emp

DISABLE CONSTRAINT  emp_empno_pk CASCADE;

使约束生效

使用ENABLE子句将失效的约束生效.

SQL> ALTER TABLE  emp

 ENABLE CONSTRAINT  emp_empno_pk;

结果:Table altered.

当使UNIQUE 或 PRIMARY KEY约束生效时,会自动创建 UNIQUE 或

PRIMARY KEY 索引.

查看约束:

通过查看 USER_CONSTRAINTS 表可得到用户的所有约束.

SQL> SELECT constraint_name, constraint_type,

search_condition

FROM  user_constraints

WHERE  table_name = 'EMP';--‘EMP’表名必须是大写

 

查看约束建立在哪些列:

通过查询USER_CONS_COLUMNS 视图可获得约束建立在哪些列上

SQL> SELECT  constraint_name, column_name

FROM  user_cons_columns

WHERE  table_name = 'EMP';

 

约束的种类:not null ,unique key,primary key,foreign key,check

查询有关约束的数据字典表

posted @ 2018-04-02 00:55  正厚7期-杨秀梅  阅读(518)  评论(0编辑  收藏  举报