mysql修改、查询事务隔离级别
来源:互联网 发布:数据自动采集系统 编辑:程序博客网 时间:2024/05/22 04:57
在标准的四个事务隔离级别中,可重复读这个隔离级别会出现幻读,但是各个数据库对隔离级别的具体实现是不一样的。Mysql中,在可重复读的隔离级别下,通过MVCC(多版本并发控制)避免了幻读,但不能说是完全避免了,在以下场景下:有更新的update语句,而且update语句影响到了insert的记录,还是会出现幻读,例子如下:
表结构:create table userinfo (id int primary key auto_increment,name varchar(10));
表中有数据:1,a
session1 session2
------------------------------------------------------------------------------------------------------------
时间点1 start transaction; start transaction;
------------------------------------------------------------------------------------------------------------
时间点2 select * from userinfo; select * from userinfo;
id name id name
1 a 1 a
-----------------------------------------------------------------------------------------------------------
时间点3 insert into userinfo(name) values ('b') ;
------------------------------------------------------------------------------------------------------------
时间点4 select * from userinfo; select * from userinfo;
id name id name
1 a 1 a
2 b
-------------------------------------------------------------------------------------------------------------
时间点5 commit;
-------------------------------------------------------------------------------------------------------------
时间点6 select * from userinfo
id name
1 a
select max(id) from userinfo;
max(id)
1
---------------------------------------------------------------------------------------------------------------
时间点7 update userinfo set name = 'c'
----------------------------------------------------------------------------------------------------------------
时间点8 select * from userinfo;
id name
1 c
2 c
select max(id) from userinfo;
max(id)
2
----------------------------------------------------------------------------------------------------------------
用户可以用SET TRANSACTION语句改变单个会话或者所有新进连接的隔离级别。它的语法如下:
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
注意:默认的行为(不带session和global)是为当前会话下一个(未开始)事务设置隔离级别。
如果你使用GLOBAL关键字,语句在全局对从那点开始创建的所有新连接(除了不存在的连接)设置默认事务级别。你需要SUPER权限来做全局设置。
使用SESSION 关键字为将来在当前连接上执行的事务设置默认事务级别。 任何客户端都能自由改变会话隔离级别(甚至在事务的中间),或者为下一个事务设置隔离级别。
你可以用下列语句设置全局和会话事务隔离级别:
mysql> set tx_isolation='read-committed'; --会话参数mysql> set global tx_isolation='read-committed'; --全局参数
read-committed 读已提交
repeatable-read 可重复读
你可以用下列语句查询全局和会话事务隔离级别:
SELECT @@global.tx_isolation; --全局参数,等同于 show global variables like 'tx_isolation'
SELECT @@session.tx_isolation; --会话参数,等同于 show variables like 'tx_isolation' 或 SELECT @@tx_isolation;
- mysql修改、查询事务隔离级别
- mysql修改事务隔离级别
- mysql修改事务隔离级别
- mysql修改事务隔离级别
- mysql修改事务隔离级别
- 查询mysql事务隔离级别
- 查询mysql事务隔离级别
- 查询mysql事务隔离级别
- 查询mysql事务隔离级别
- 查询mysql事务隔离级别
- 查询mysql事务隔离级别
- 查询mysql事务隔离级别
- MySQL事务隔离级别详解(修改)
- 查询和设置mysql事务隔离级别
- mysql查询事务隔离级别命令
- 查询mysql事务隔离级别[zhuan]
- mysql事务隔离级别
- Mysql 事务隔离级别
- 统计Echarts图表
- Mondrian打开聚合表功能的配置
- 在PHP5.3以上版本运行ecshop和ecmall出现的问题及解决方案
- ogg_级联复制'
- 如何做出一款优秀的APP
- mysql修改、查询事务隔离级别
- stm32 keil MDK在线调试报错 Error: Flash download failed-"Cortex-M3"
- 关系型数据库和非关系型数据库区别
- POJ 3069 Saruman's Army (贪心)
- MySQL 及 SQL 注入
- Libcurl 使用与编程
- ogg_概述
- JAVA伴我行——项目篇(一):开发模型,敏捷开发和瀑布模型的结合
- SQL Server 服务由于登录失败而无法成功启动 错误 1069