首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL事务隔离级别

我们可以用SET TRANSACTION语句改变单个会话或者所有新进连接的隔离级别。它的语法如下:

SET[SESSION GLOBAL]TRANSACTIONISOLATIONLEVEL{READUNCOMMITTEDREADCOMMITTEDREPEATABLEREADSERIALIZABLE}

你可以用下列语句查询全局和会话事务隔离级别:

SELECT@@global.tx_isolation;

SELECT@@session.tx_isolation;

SELECT@@tx_isolation;

查询全局和会话事务隔离级别:

mysql> select @@global.tx_isolation,@@tx_isolation;

+-----------------------+-----------------+

@@global.tx_isolation @@tx_isolation

+-----------------------+-----------------+

REPEATABLE-READ REPEATABLE-READ

+-----------------------+-----------------+

1 row in set (0.00 sec)

修改全局事务隔离级别:

mysql> set global transaction isolation level READ COMMITTED;

Query OK, 0 rows affected (0.00 sec)

修改会话事务隔离级别:

mysql> set session transaction isolation level READ COMMITTED;

Query OK, 0 rows affected (0.00 sec)

mysql> select @@global.tx_isolation,@@tx_isolation;

+-----------------------+----------------+

@@global.tx_isolation @@tx_isolation

+-----------------------+----------------+

READ-COMMITTED READ-COMMITTED

+-----------------------+----------------+

1 row in set (0.00 sec)

操作很简单,下面介绍不同隔离级别的特性

隔离性表示一个事务的修改结果在什么时间能够被其他事务看到,SQL1992规范中对隔离性定义了不同的隔离级别。

1、READ UNCOMMITED:读未提交(READ UNCOMMITED),事务能够看到其他事务没有提及的修改,当另一个事务又回滚了修改后的情况又被称为脏读dirty read。

2、READ COMMITTED:读已提交(READ COMMITTED),事务能够看到其他事务提交后的修改,这时会出现一个事务内两次读取数据可能因为其他事务提交的修改导致不一致的情况,称为不可重复读。

3、REPEATABLE READ:可重复读(REPEATABLE READ),MySQL默认模式,在两次读取时读取到的数据的状态是一致的,

4、SERIALIZABLE:序列化(SERIALIZABLE)可重复读中可能出现第二次读读到第一次没有读到的数据,也就是被其他事务插入的数据,这种情况称为幻读phantom read, 序列化级别中不能出现幻读。

隔离级别依次增强,但是导致的问题是并发能力的减弱。各种数据库厂商会对各个隔离级别进行实现。和Java中的多线程问题相同,数据库通常使用锁来实现隔离性。最原生的锁,锁住一个资源后会禁止其他任何线程访问同一个资源。但是很多应用的一个特点都是读多写少的场景,很多数据的读取次数远大于修改的次数,而读取数据间互相排斥显得不是很必要。所以就使用了一种读写锁的方法,读锁和读锁之间不互斥,而写锁和写锁、读锁都互斥。这样就很大提升了系统的并发能力。之后人们发现并发读还是不够,又提出了能不能让读写之间也不冲突的方法,就是读取数据时通过一种类似快照的方式将数据保存下来,这样读锁就和写锁不冲突了,不同的事务session会看到自己特定版本的数据。当然快照是一种概念模型,不同的数据库可能用不同的方式来实现这种功能。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180206G0NVYG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券