mysql怎么解决不可重复读
MySQL解决不可重复读的方法:
mysql中,默认的事务隔离级别是可重复读(repeatable-read),为了解决不可重复读,innodb采用了mvcc(多版本并发控制)来解决这一问题。
mvcc是利用在每条数据后面加了隐藏的两列(创建版本号和删除版本号),每个事务在开始的时候都会有一个递增的版本号
新增:
insert into user (id,name,age)values(1,"张三",10);

更新:
update user set age = 11 where id = 1;
更新操作采用delete+add的方式来实现,首先将当前数据标志为删除

然后新增一条新的数据:

删除:删除操作是直接将数据的删除版本号更新为当前事务的版本号
delete from user where id = 1;

查询操作:
select * from user where id = 1;
查询操作为了避免查询到旧数据或已经被其他事务更改过的数据,需要满足如下条件:
1、查询时当前事务的版本号需要大于或等于创建版本号
2、查询时当前事务的版本号需要小于删除的版本号
即:create_version <= current_version < delete_version
这样就可以避免查询到其他事务修改的数据
您可能感兴趣的文章
- 12-31hiredis从安装到项目实战操作
- 12-31phpmyadmin登录时怎么指定服务器ip和端口
- 12-31MySQL线上死锁分析实战
- 12-31MySQL 触发器的使用和理解
- 12-31MySQL 字段默认值该如何设置
- 12-31Redis主从同步配置的方法步骤(图文)
- 12-31MySQL 字符串拆分操作(含分隔符的字符串截取)
- 12-31redis 交集、并集、差集的具体使用
- 12-31MySQL精讲之二:DML数据操作语句
- 12-31PostgreSQL判断字符串是否包含目标字符串的多种方法


阅读排行
推荐教程
- 12-07mysql中外链接是什么意思?
- 12-08添加mysql的用户名和密码是什么语句?
- 12-05mysql的事务,隔离级别和锁用法实例分析
- 12-23PL/SQL登录Oracle数据库报错ORA-12154:TNS:无法解析指定的连接标识符
- 12-23详解Oracle游标的简易用法
- 12-23使用imp和exp命令对Oracle数据库进行导入导出操作详解
- 12-20PhpMyAdmin出现错误数据无法导出怎么办?
- 12-19Redis中实现查找某个值的范围
- 12-11mysql代码执行结构实例分析【顺序、分支、循环结构】
- 12-07Redis中的Scan命令的使用详解




