首页  >  文章  >  数据库  >  Oracle 11g 第十章知识点总结约束

Oracle 11g 第十章知识点总结约束

WBOY
WBOY原创
2016-06-07 15:31:071000浏览

Oracle 11g 第十章知识点总结——约束 知识点预览 复习 约束 复习 --主键primarykey--(非空唯一) --唯一能够标识表里的一条记录--非空 not null--唯一性约束unique--检查约束 check(gender in('男','女')) --外键 --当前表里的这个外键是另外一张表里的主键

Oracle 11g 第十章知识点总结——约束


知识点预览

 

复习

约束

 

复习


--主键
primarykey
--(非空+唯一)
         --唯一能够标识表里的一条记录
--非空
         not null
--唯一性约束
unique
--检查约束
         check(gender in('男','女'))
        
--外键
         --当前表里的这个外键是另外一张表里的主键
         --必须和哪个主键的数据类型和长度保持一致
 
 
--删除表
         drop table table_name
         --产生乱码
         purge table "BIN$2RcRpY2KSLy+FONALkCBUw==$0";
         purge table t_tes;--错误
        
 
--DBA
 
        
--创建表
--分类表
--基表
                  
                            create tablecategory (
                                     idnumber(3) primary key,
                                     namevarchar2(20) not null
                            );
--产品表
--从表
                  
                            create table product(
                                     idnumber(10) primary key,
                                     namevarchar2(20) not null,
                                     cidnumber(3),
                                     constraintscott_product_cid_FK foreign key(cid) references category(id)
                            );
                           
                   insert into categoryvalues(1,'电脑');
                   insert into productvalues(1,'IBM',1);
                  
                   insert into categoryvalues(2,'食品');
                   insert into productvalues(2,'牛肉干',2);
                  
--删除
--先删除从表数据
--后删主表数据
       delete category where id=1;
 



约束


1.      什么是约束

a)        约束是表级的强制规定

b)       约束放置在表中删除有关联关系的数据

c)        有以下五种约束:

                                     i.             NOT NULL

                                   ii.             UNIQUE

                                 iii.             PRIMARY KEY

                                  iv.             FOREIGN KEY

                                    v.             CHECK


2.      注意事项

a)        如果不指定约束名 Oracle server 自动按照 SYS_Cn 的格式指定约束名

b)       在什么时候创建约束:

                                     i.             建表的同时

                                   ii.             建表之后

c)        可以在表级或列级定义约束

d)       可以通过数据字典视图查看约束


3.      定义约束

 

a)        语法

CREATE TABLE[schema.]table

    (columndatatype [DEFAULT expr]

        [column_constraint],

        ...

        [table_constraint][,...]);

 

CREATE TABLEemployees(
            employee_id  NUMBER(6),
         first_name   VARCHAR2(20),
            ...
            job_id       VARCHAR2(10) NOT NULL,
    CONSTRAINT emp_emp_id_pk
                     PRIMARYKEY (EMPLOYEE_ID));


 

b)       列级

 

column [CONSTRAINT constraint_name]constraint_type,

 

c)        列级

 

column,...

  [CONSTRAINT constraint_name]constraint_type

  (column, ...),

 

4.      NOT NULL 约束

 

a)        保证列值不能为空:

b)       只能定义在列级:


 Oracle 11g 第十章知识点总结约束


 

5.      UNIQUE 约束

 

可以定义在表级或列级:

 

CREATE TABLE employees(
    employee_id      NUMBER(6),
    last_name        VARCHAR2(25) NOT NULL,
    email            VARCHAR2(25) ,
    salary           NUMBER(8,2),
    commission_pct   NUMBER(2,2),
    hire_date        DATE NOT NULL,
... 
    CONSTRAINT emp_email_uk UNIQUE(email));


6.      PRIMARY KEY 约束

 

可以定义在表级或列级:

 

CREA TETABLE   departments(
    department_id        NUMBER(4),
    department_name      VARCHAR2(30)
      CONSTRAINT dept_name_nn NOT NULL,
    manager_id           NUMBER(6),
    location_id          NUMBER(4),
      CONSTRAINT dept_id_pk PRIMARYKEY(department_id));


7.      FOREIGN KEY 约束

 

可以定义在表级或列级:

 

CREATE TABLEemployees(
    employee_id      NUMBER(6),
    last_name        VARCHAR2(25) NOT NULL,
    email            VARCHAR2(25),
    salary           NUMBER(8,2),
    commission_pct   NUMBER(2,2),
    hire_date        DATE NOT NULL,
...
    department_id    NUMBER(4),
    CONSTRAINT emp_dept_fk FOREIGN KEY(department_id)
      REFERENCES departments(department_id),
    CONSTRAINT emp_email_uk UNIQUE(email));


8.      FOREIGN KEY 约束的关键字

a)        FOREIGN KEY: 在表级指定子表中的列

b)       REFERENCES: 标示在父表中的列

c)        ON DELETE CASCADE: 当父表中的列被删除是,子表中相对应的列也被删除

d)       ON DELETE SET NULL: 子表中相应的列置空


9.      CHECK 约束

a)        定义每一行必须满足的条件

b)       以下的表达式是不允许的:

                                     i.             出现CURRVAL, NEXTVAL, LEVEL, 和ROWNUM 伪列

                                   ii.             使用 SYSDATE, UID, USER, 和 USERENV 函数

                                 iii.             在查询中涉及到其它列的值

 

 

..., salary NUMBER(2)
     CONSTRAINT emp_salary_min 
            CHECK (salary > 0),...


10.  添加约束的语法

 

使用 ALTER TABLE 语句:

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

有效化或无效化约束

添加 NOT NULL 约束要使用 MODIFY 语句

 

ALTER TABLE    table

      ADD [CONSTRAINT constraint]type (column);

 

11.  添加约束举例

 

ALTER TABLE     employees
ADDCONSTRAINT  emp_manager_fk
  FOREIGN KEY(manager_id)
  REFERENCES employees(employee_id);


Table altered.


12.  删除约束

a)        表 EMPLOYEES 中删除约束

 

ALTER TABLE      employees
DROPCONSTRAINT  emp_manager_fk;


Table altered.

b)       使用CASCADE选项删除约束

 

ALTER TABLE      departments
DROP PRIMARY KEYCASCADE;


Table altered.


13.  无效化约束

a)        在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化。

b)       使用 CASCADE 选项将相关的约束也无效化

 
ALTER TABLE             employees
DISABLE CONSTRAINT     emp_emp_id_pk CASCADE;


Table altered.


14.  激活约束

a)        ENABLE 子句可将当前无效的约束激活

 

ALTER TABLE             employees
ENABLECONSTRAINT      emp_emp_id_pk;


Table altered.

b)       当索引定义或激活UNIQUE 或 PRIMARY KEY 约束时系统会自动创建UNIQUE 或 PRIMARY KEY

 

15.  及连约束

a)        CASCADE CONSTRAINTS 子句在 DROP COLUMN 子句中使用

b)       在删除表的列时 CASCADE CONSTRAINTS 子句指定将相关的约束一起删除

c)        在删除表的列时 CASCADE CONSTRAINTS 子句同时也删除多列约束

 

d)       及连约束举例:

 

 

ALTER TABLEtest1
DROP (pk)CASCADE CONSTRAINTS;


Table altered.

 

ALTER TABLEtest1
DROP (pk, fk,col1) CASCADE CONSTRAINTS;


Table altered.


16.  查询约束

 

查询数据字典视图 USER_CONSTRAINTS

 

SELECT  constraint_name, constraint_type,
search_condition
FROM     user_constraints
WHERE   table_name = 'EMPLOYEES';


17.  查询定义约束的列

 

查询数据字典视图 USER_CONS_COLUMNS

 

SELECT  constraint_name, column_name
FROM     user_cons_columns
WHERE   table_name = 'EMPLOYEES';


 


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn