MySQL事务的四种隔离界别以及会造成的问题和解决办法

MySQL事务的特性:原子性、隔离性、持久性、一致性

MySQL四种隔离界别:读未提交、读已提交、可重复度、串行化 

 一、读未提交(read uncommitted):

 读未提交:那个问题都不能解决。容易出现脏读。脏读就是,一个事务中读到了另一个事务未提交的数据。如下面例子

 事务A:

MySQL事务的四种隔离界别以及会造成的问题和解决办法

事务B:

 MySQL事务的四种隔离界别以及会造成的问题和解决办法

 二、读已提交(read committed)

可以解决脏读,但是会不可重复读(每次读取只读取当前事务里面的当时的数据)

 MySQL事务的四种隔离界别以及会造成的问题和解决办法MySQL事务的四种隔离界别以及会造成的问题和解决办法

三、可重复度(repeatable read) 

可以保证在同一个事务中只会读取到当前事务对数据的修改,其他事务修改的数据不会影响到当前事务的任何一次读取。 

 但是可能会出现幻读。

MySQL事务的四种隔离界别以及会造成的问题和解决办法 MySQL事务的四种隔离界别以及会造成的问题和解决办法

四、可串行化 (serializable)

可以解决 脏读 不可重复读 和 虚读---相当于锁表,代价是,严重影响了数据库的性能。

 以上所有隔离级别都各有优点,没有万能的;要看需要而定。但是读未提交和串行化业内使用较少,主要是因为脏读和性能问题。

小点:

  • 数据库查询隔离级别:SELECT @@tx_isolation;
  • 设置数据库隔离级别:set session transaction isolation level 级别名称;

今天分享到这里,朋友请继续努力!努力才是最应该做的事!