zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    Python异常处理
    Python 线程、进程和协程
    python版本升级及pip部署方法
    Python socket编程
    循环遍历方法笔记
    TCP/IP协议分为哪四层,具体作用是什么。
    Python Paramiko模块与MySQL数据库操作
    Python面向对象编程(二)
    h5专题常用小代码
    sethc问题
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/3462908.html
Copyright © 2011-2022 走看看