1.事务的并发访问
数据库并发访问就是同时有多个请求访问同一张表的同一条记录。这样会造成数据不一致的情况。需要采取并发控制保证数据的完整性。
出现并发访问通常要采取一定的隔离措施,如果没有采取必要的隔离措施,就会导致各种并发问题,破坏数据的完整性。这些问题可以归结为5类,包括3类数据读问题( 脏读、 不可重复读和 幻象读)以及2类数据更新问题( 第一类丢失更新和 第二类丢失更新)。下面,我们分别通过实例讲解引发问题的场景。
2.脏读(dirty read)

在这个场景中,B希望取款500元而后又撤销了动作,而A往相同的账户中转账100元,就因为A事务读取了B事务尚未提交的数据,因而造成账户白白丢失了500元。在Oracle数据库中,不会发生脏读的情况。
3.不可重复读(unrepeatable read)
A事务读取了B事务已经提交的更改数据
在同一事务中,T4时间点和T7时间点读取账户存款余额不一样。
4.幻象读(phantom read)
A事务读取B事务提交的新增数据

幻象读和不可重复读是两个容易混淆的概念,前者是指读到了其他已经提交事务的新增数据,而后者是指读到了已经提交事务的更改数据(更改或删除),为了避免这两种情况,采取的对策是不同的,防止读取到更改数据,只需要对操作的数据添加行级锁,阻止操作中的数据发生变化,而防止读取到新增数据,则往往需要添加表级锁——将整个表锁定,防止新增数据(Oracle使用多版本数据的方式实现)。
5.第一类丢失更新
A事务撤销时,把已经提交的B事务的更新数据覆盖了。
A事务在撤销时,“不小心”将B事务已经转入账户的金额给抹去了。
6.第二类丢失更新
A事务覆盖B事务已经提交的数据,造成B事务所做操作丢失

上面的例子里由于支票转账事务覆盖了取款事务对存款余额所做的更新,导致银行最后损失了100元,相反如果转账事务先提交,那么用户账户将损失100元。
7.MySQL的事务隔离级别
使用以下命令查询MySQL8.0 默认的事务隔离级别:
select @@global.transaction_isolation,@@transaction_isolation;

mysql默认的事务隔离级别为repeatable-read,隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。
注意: ==通常情况下我们无需修改数据库默认的事务隔离级别。==