oracle 10g 学习之数据进行增删改查、数据库事务、约束(8)

目标

通过本章学习,您将可以:

l  使用 DML 语句

l  向表中插入数据

l  更新表中数据

l  从表中删除数据

l  控制事务

l  描述约束

l  创建和维护约束

数据控制语言

l     DML(Data Manipulation Language – 数据操作语言) 可以在下列条件下执行:

  • 向表中插入数据
  • 修改现存数据
  • 删除现存数据

l  事务是由完成若干项工作的DML语句组成的

从其它表中拷贝数据

         INSERT INTO sales_reps(id, name, salary, commission_pct)

  SELECT employee_id, last_name, salary, commission_pct

  FROM   employees

  WHERE  job_id LIKE '%REP%';

数据库事务

         数据库事务由以下的部分组成:

l  一个或多个DML 语句

l  一个 DDL(Data Definition Language – 数据定义语言) 语句

l  一个 DCL(Data Control Language – 数据控制语言) 语句

l  以第一个 DML 语句的执行作为开始

l  以下面的其中之一作为结束:

l  COMMIT 或 ROLLBACK 语句

l  DDL 或 DCL 语句(自动提交)

l  用户会话正常结束

l  系统异常终了

控制事务

l     使用 SAVEPOINT 语句在当前事务中创建保存点。

l  使用 ROLLBACK TO SAVEPOINT 语句回滚到创建的保存点。

UPDATE...

SAVEPOINT update_done;

INSERT...

ROLLBACK TO update_done;

 如果直接ROLLBACK将会全部回滚

什么是约束

l   约束是表级的强制规定

l   有以下五种约束:

  • • NOT NULL
  • • UNIQUE
  • • PRIMARY KEY
  • • FOREIGN KEY
  • • CHECK

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

NOT NULL 约束

CREATE TABLE employees(

    employee_id    NUMBER(6),

    last_name      VARCHAR2(25) NOT NULL,//系统约束命名

    salary         NUMBER(8,2),

    commission_pct NUMBER(2,2),

    hire_date      DATE

                   CONSTRAINT emp_hire_date_nn//自定义约束命名

                   NOT NULL,

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

PRIMARY KEY 约束

          CREATE TABLE   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 PRIMARY KEY(department_id));

                FOREIGN KEY 约束

                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,

...

    department_id    NUMBER(4),

    CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)

      REFERENCES departments(department_id),

    CONSTRAINT emp_email_uk UNIQUE(email));

       FOREIGN KEY 约束的关键字

  • •          FOREIGN KEY: 在表级指定子表中的列
  • • REFERENCES: 标示在父表中的列
  • • ON DELETE CASCADE: 当父表中的列被删除时,子表中相对应的列也被删除
  • • ON DELETE SET NULL: 当父表中的列被删除时,子表中相应的列置空

CHECK 约束

         ..., salary NUMBER(2)

     CONSTRAINT emp_salary_min 

            CHECK (salary > 0),...

添加约束的语法

    使用 ALTER TABLE 语句:

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

l  有效化或无效化约束

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

  ALTER TABLE         table

  ADD [CONSTRAINT constraint] type (column);

ALTER TABLE     employees

ADD CONSTRAINT  emp_manager_fk

  FOREIGN KEY(manager_id)

  REFERENCES employees(employee_id);

删除约束

ALTER TABLE      employees

DROP CONSTRAINT  emp_manager_fk;

原文地址:https://www.cnblogs.com/yxlblogs/p/3462908.html