并发控制

事务是并发控制的基本单位,为了保证事务的隔离性和一致性,需要对并发操作进行正确的调度。

1、并发操作带来的不一致问题:

(1)丢失修改:

两个事务读取同一个数据,并对该数据进行修改,T1提交的数据破坏了T2提交的数据,即后提交的数据覆盖了先提交的数据,导致先提交的数据结果被覆盖了。

(2)不可重复读:

事务T1读取到某一数据后,事务T2对该数据进行了修改,当T1再次读取该数据的时候发现数据已经改变。

(3)读脏数据:

事务T1读取到某一数据并对其修改,T2读取到了修改后的数据,但是由于某种原因,T1被撤销,T2读取到的数据与T1的实际值存在不一致。

即:事务T2读取到了T1尚未提交的数据。

2、数据库的封锁:

封锁是实现并发控制的重要技术。

read uncommitted : 读取尚未提交的数据 

read committed:读取已经提交的数据 ,可以解决脏读 ,oracle默认的级别。

repeatable read:重读读取,可以解决脏读 和 不可重复读 ,mysql默认的级别。

serializable:串行化,可以解决 脏读 不可重复读 和 丢失修改,相当于锁表,会使得数据库的效率极低。

(1)查询mysql数据库的隔离级别:

SELECT @@tx_isolation

 即:mysql数据库的默认封锁级别是:repeatable read

(2)mysql数据库的隔离级别的修改:

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

 即:在mysql数据库中不会出现脏读 和 不可重复读的现象。

原文地址:https://www.cnblogs.com/zhai1997/p/11710082.html