Mysql隔离级别
来源:互联网 发布:mysql primarykey 编辑:程序博客网 时间:2024/05/16 12:43
先记录下几个概念:
脏读:在当前事务中,读取到其他事务中还未提交的数据
不可重复读:在当前事务中,读取某一行的数据,可能读出的数据不同
幻读:在当前事务中,读取记录时,另外的事务插入了新的记录,当前事务可能出现新的行。
四种隔离级别:
1.未提交读
可能读到脏数据
会话A中的隔离级别为未提交读
表中原来的数据
会话B中,启动一个实务,并且,修改其中一个数据
在会话A中可以看到提交之前的数据,即可以看到脏数据
在会话B中回滚之前的事务
会话A中查到回滚之后并未提交的数据。
2.提交读,可以避免脏读
可能发生不可重复读
在会话A中启动一个事务,查看全表的数据
在会话B中进行一个事务修改其中一个行
在会话A中可以看到这个变化
3.可重复读 可以避免不可重复读
但是可能出现幻读
在mysql5.1中没有发现幻读,可能和不同的数据库的实现有关(可能和MVCC有关)
4.可串行化 可以避免幻读(将所有读取的行都加了锁)
MVCC:Multi-Version Concurrency Control 多版本并发控制
InnoDB的MVCC是通过没行记录后面保存两个隐藏的列来实现的。
一个保存了行的创建时间,另一个保存了删除时间。时间用版本号来记录,每开始一个事务系统版本号就递增。
REPEATABLE READ隔离等级下
INSERT 新插入和每一行保存当前系统版本号为创建时间
DELETE 删除的每一行保存当前系统版本号位删除时间
UPDATE 插入一条新的数据,保存当前系统版本号作为创建时间,同时保存当前系统版本号到原来的行作为删除时间
SELECT 查找早于当前事务版本号的行,并且要查找删除版本号大于当前事务版本号的行。
(解释了为什么插入新行没有显示)
附:mysql的一些基本操作
建表:create table 表名 (id int, num int) type=innodb;
查看表类型:show create table 表名;
查看会话隔离级别:select @@tx_isolation;
查看全集隔离级别: select @@global.tx_isolation;
修改会话隔离级别:set session tx_isolation='read-uncommitted';
- Mysql 隔离级别
- mysql事务隔离级别
- Mysql 事务隔离级别
- MySQL隔离级别
- mysql 事务隔离级别
- MySQL事务隔离级别
- mysql 事务隔离级别
- mysql 事务隔离级别
- Mysql隔离级别
- mysql 事务隔离级别
- Mysql隔离级别
- MySQL 事务隔离级别
- mysql事务隔离级别
- Mysql事务隔离级别
- mysql隔离级别
- MySQL隔离级别
- MySQL事务隔离级别
- MySQL InnoDB隔离级别
- 配置Sencha Touch android-sdk-linux 的Fedora 20环境
- VC 的注册表1
- 单链表操作
- Visual Studio 2010 SP1 崩溃 异常代码0xe0434352
- spring特点
- Mysql隔离级别
- 启程,尝试MacMINI装多系统
- C++与AS3中socket字节顺序
- IE11中使用window.open()方法获取不到参数解决方法
- 【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集
- Spring MVC 框架搭建及详解
- Word文档任意页插入页码?比如从第三页正文开始插入
- 2014年5月份计划
- 使用工具安全删除Windows 7系统及数据资料方法介绍