MySQL事务的四种隔离界别以及会造成的问题和解决办法
MySQL事务的特性:原子性、隔离性、持久性、一致性
MySQL四种隔离界别:读未提交、读已提交、可重复度、串行化
一、读未提交(read uncommitted):
读未提交:那个问题都不能解决。容易出现脏读。脏读就是,一个事务中读到了另一个事务未提交的数据。如下面例子
事务A:
事务B:
二、读已提交(read committed)
可以解决脏读,但是会不可重复读(每次读取只读取当前事务里面的当时的数据)
三、可重复度(repeatable read)
可以保证在同一个事务中只会读取到当前事务对数据的修改,其他事务修改的数据不会影响到当前事务的任何一次读取。
但是可能会出现幻读。
四、可串行化 (serializable)
可以解决 脏读 不可重复读 和 虚读---相当于锁表,代价是,严重影响了数据库的性能。
以上所有隔离级别都各有优点,没有万能的;要看需要而定。但是读未提交和串行化业内使用较少,主要是因为脏读和性能问题。
小点:
- 数据库查询隔离级别:SELECT @@tx_isolation;
- 设置数据库隔离级别:set session transaction isolation level 级别名称;
今天分享到这里,朋友请继续努力!努力才是最应该做的事!