Oracle附录——Oracle事务

一、事务的定义

  事务是由一组SQL语句组成的单个逻辑工作单元,这些SQL语句要么全部执行成功,要么全部执行失败。

二、事务的重要性

  一般在程序的使用中,将由多条SQL语句共同组成一个程序的功能,在没有事务的情况下,其中任何一条SQL语句执行错误都有可能造成数据库内数据的不

  准确,影响程序的运行,给用户带来不好的影响,造成巨大的损失。

三、事务的特性

  事务有四大特性,可简称为ACID,分别是原子性(Atomic)、一致性(Consistence)、隔离性(Isolation)、持久性(Durability)。

  1、原子性(Atomic)

    一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都成功,要么都不成功。例如银行转账的操作,如果从转出操作执行失败,那么这

    个事务就已经执行失败,无论转入操作是否成功,所修改的数据都不会被提交到数据库。

  2、一致性(Consistence)

    一个事务执行前和执行后的数据应是一致的。例如银行转账的操作,转入的金额应和转出的金额一致,两个账户转账前后的资金总额应是一致的。

  3、隔离性(Isolation)

    在同一时刻应只有一个事务在对相应数据进行操作。例如,银行转账的操作,如果A账户在向B账户转账的时候,C账户也向B账户转账,那么C账户必须

    等待A账户转账完毕才可向B账户转账。

  4、持久性(Durability)

    当事务结束后,它对数据库中的影响应是永久的,即便系统遇到故障,数据也不会丢失。例如银行转账的操作,在一个转账操作完成后,此次转账操作

    会被记录下来,即使银行系统故障了,也能恢复数据。

四、事务的使用

  1、COMMIT

    执行COMMIT命令会确认事务的变化,结束事务,删除保存点,释放锁,其它会话将可以查看到事务变化后的新数据。

  2、SAVEPOINT

    执行SAVEPOINT命令会创建一个保存点,使用保存点可以方便的撤销所做的部分事务而不必全部撤销。

  3、ROLLBACK

    执行ROLLBACK命令可以回滚部分或全部事务,当回滚全部事务时,会结束事务,删除保存点,释放锁。

  具体使用方法请看示例:

--创建users表
CREATE TABLE users
    (
        id NUMBER(5) PRIMARY KEY,
        name VARCHAR2(20),
        password VARCHAR2(20)
    );

--添加三条数据
INSERT INTO users VALUES (100,'张三','zhangsan');
INSERT INTO users VALUES (101,'李四','lisi');
INSERT INTO users VALUES (102,'王五','wangwu');

--执行COMMIT命令提交事务
COMMIT;

--查询所有数据,此时表存在三条数据,id为100,101,102
SELECT * FROM users;

--删除id为100的数据
DELETE FROM users WHERE id=100;

--设置保存点point_a
SAVEPOINT point_a;

--删除id为101的数据
DELETE FROM users WHERE id=101;

--查询所有数据,此时表只剩下id为102的数据
SELECT * FROM users;

--回滚到保存点point_a
ROLLBACK TO point_a;

--查询所有数据,表中有两条数据,id为101和102,删除id为101的命令被撤销
SELECT * FROM users;

--回滚全部事务
ROLLBACK;

--查询所有数据,表中有三条数据,id为100,101,102,本次事务所执行的所有修改被回滚
SELECT * FROM users;
事务使用示例

   注意:事务的提交和回滚尽量显示的进行,而不是让数据库自动提交或回滚事务(当会话结束或执行DDL语句时,之前未提交的事务将被提交),因为自

   动提交事务可能会引发各种问题,因此,在一组DML命令之后应紧随着COMMIT或ROLLBACK。

posted @ 2017-02-15 21:29  桜田夕  阅读(421)  评论(0编辑  收藏  举报