当前位置:Gxlcms > mysql > Oracle11g第十章知识点总结约束

Oracle11g第十章知识点总结约束

时间:2021-07-01 10:21:17 帮助过:50人阅读

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) 只能定义在列级:



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';

人气教程排行