Oracle 事务

一、事务的基本概念

事务(Transaction),一般 是指要做的或所做的事情,通常这件事会包含多个步骤。事务中的多个步骤处理起来就像处理一个步骤一样,要么全部成功,要么全部失败。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

事务的目的就是为了保证数据的完整性,以银行转换业务为例:

A用户向B转账1000元,步骤如下:

1)A用户账户余额减少1000元;

2)B用户账户余额增加1000元;

3)记录A用户的交易日志。

4)记录B用户的交易日志。

一笔转帐交易将产生四次数据库操作,要么全部都成功,如果有一个失败,其它操作也应该全部被撤销。

转账交易有四次数据库操作,即四条SQL语句,第一条SQL执行的时候是事务的开始,如果全部的SQL语句执行成功,提交事务,如果有任何一条SQL语句执行失败,回滚事务。

commit; – 提交事务。

rollback; – 回滚事务。

二、事务的特征

事务是保证数据完整性的一种手段,事物具备ACID原则。
在这里插入图片描述
未提交事务之前的操作是存放在缓冲区中,当提交了事务之后就保存在数据库中。

1.事务的原子性(Atomicity):

是指一个事务要么全部执行,要么不执行,也就是说一个事务不可能只执行了一半就停止了,要一气呵成。比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱。不可能划了卡,而钱却没出来。这两步必须同时完成,要么就不完成。

2.事务的一致性(Consistency):

例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变。

3.独立性(Isolation):

事务的独立性也有称作隔离性,是指两个以上的事务不会出现交错执行的状态。因为这样可能会导致数据不一致。

4.持久性(Durability):

事务的持久性是指事务执行成功以后,该事务对数据库所作的更改便是持久的保存在数据库之中,不会无缘无故的回滚。

三、事务锁

1.多个会话同时处理一条数据

每一个session都进行自己的事物处理,如果现在两个session同时操作同一条数据,该如何呢?

两个session更新了同一条数据。此时就会出现锁的情况。即:在第一个session没有提交或回滚之前,第二个session要一直等待着更新完成。所以在事务处理过程之中,是存在行级锁定的概念,即:在提交或回滚之前,只能够有一个session操作数据,事物的隔离性。这个就像是大家一起用一个公共厕所一样,一个人在使用,另一个人处于等待。

(1)现在在第一个窗口修改 account=‘1003’ 的记录的 je 值,并且对这个资源上锁
在这里插入图片描述

(2)在第二个窗口同时对这条记录的 je 值进行修改,会处于等待中。
在这里插入图片描述
(3)第一个窗口提交事务,释放锁,释放资源。那么第二个窗口会得到等待资源,并且在第二个窗口修改。

在这里插入图片描述

在这里插入图片描述

2.注意事项

(1)避免锁的竞争

对个会话对同一个表进行操作并不能提高效率

(2)不要产生大事务

事务处理的数据量越大,对数据库的冲击就越大

(3)不要产生长事务

事务越长(处理时间长)越容易产生锁竞争,时间越长持有锁的时间就越长。


版权声明:本文为qq_43403759原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。