MySQL InnoDB Lock(一)
MySQL InnoDB Lock主要从5个部分介绍,这篇文章介绍前2部分,下一篇会详细介绍后3部分。
- 数据库数据一致性
- InnoDB事物一致级别
- InnoDBLock基础知识
- RR一致级别下SQL对应InnoDBLock情形
- InnoDBLock定位分析
数据库数据一致性
u 脏读:dirty read,事物A读取到事物B未提交的事物。不符合一致性。
u 不可重复读:事物A读取数据,事物B读取到此数据并且更新此数据,事物A为了对读取数据进行检验再次读取数据时,2次读取获得不同的数据。在一个事务内,多次读同一个数据。在这个事务还没有结束时,另一个事务也访问该同一数据。那么,在第一个事务的两次读数据之间。由于第二个事务的修改,那么第一个事务读到的数据可能不一样,这样就发生了在一个事务内两次读到的数据是不一样的,因此称为不可重复读,即原始读取不可重复。
u 幻读:phantonread,事物A读取到事物B新增、删的数据。(增加读取范围的lock)select ... for update。事务A读取与搜索条件相匹配的若干行,事务B以插入或删除行等方式来修改事务A的结果集,然后再提交。
幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。
一般解决幻读的方法是增加范围锁RangeS,锁定检锁范围为只读,这样就避免了幻读。
InnoDB事物一致级别
u read uncommitted:RU,读未提交(存在脏读)。事物A读取到事物B未提交的事物。
set globaltransaction isolation level read uncommitted;
set sessiontransaction isolation level read uncommitted;
transaction-isolation=read-uncommitted
select@@global.tx_isolation;
select@@session.tx_isolation;
u read committed:RC,读已提交(存在不可重复读、幻读)。事物A读取事物B已经提交的事物。 ----Oracle提供的事物隔离级别
set global transaction isolation level read committed;
互联网业务一般采用此事物隔离级别。
u repeatable read:RR 可重复读,存在“幻读”可能。 -----MySQL缺省的事物隔离级别
set global transaction isolation level repeatable read;
交易性事物,建议使用此事物隔离级别。 MySQL RR级别,通过Next-Key index解决“幻读”问题。
u serializable:串行化。
set global transaction isolation level serializable;
读增加了表级的Share Lock,更新增加了表级的ExclusiveLock。
1. RU的脏读:session A没有提交,sessionB就可以看到结果
2.RC的不可重复读:session A更新数据,session B两次读取数据不同
3.RC幻读:session A插入数据,session B的结果集被修改了,好像产生了幻觉
4. RR的可重复读:session A 事物执行更新操作,session B事物查看结果不一样,只有session A执行一个完整事物后,session B才能看到同样结果。
5. RR的不幻读
6. 串行化的表级S和X lock
未完待续,下一篇将结合隔离级别分析锁机制,请持续关注
- 3D游戏开发之UE4中的集合:TSet容器
- weblogic启动失败:Could not obtain the localhost address 解决办法
- 如何理解云计算?很简单,就像吃货想吃披萨了……
- .NET 2.0 中使用Active Directory 应用程序模式 (ADAM)
- struts2: 通过流输出实现exce导出
- Google的数据交换协议:GData (Google Data APIs Protocol)
- C# 内部类
- 四字母.com域名均以五位数结拍
- mybatis 3.2.7 与 spring mvc 3.x、logback整合
- spring 3.2.x + struts2 + mybatis 3.x + logback 整合配置
- struts2使用Convention Plugin在weblogic上以war包部署时,找不到Action的解决办法
- 使用xfce4桌面系统
- 号外!号外!Python纳入高考内容了!人工智能时代就要来临了!
- 高颜值!域名5h.net和jb.cc纷纷易主
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解