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。