Mysql版本:5.6.27
事务隔离级别:Repeatable Read
导致出现问题的原因:timestamp 类型加了UPDATE CURRENT_TIMESTAMP
表结构:
CREATE TABLE `t_test` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`AMOUNT` smallint(6) DEFAULT NULL,
`CREATED_TIME` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
情景1:保留UPDATE CURRENT_TIMESTAMP配置
前提:两个线程并发
线程1:
- 1. 开启事务
- 2. 读取表select count(1) from t_test 结果为0
- 3. 阻塞线程让线程2执行
- 4. 更新表update t_test set AMOUNT = 10 返回执行的行数为1
- 5. 读取表select count(1) from t_test 结果为0
- 6. 事务结束
线程2:
- 1. 开启事务
- 2. 插入数据 insert into t_test (AMOUNT) values (10)
- 3. 事务结束
情景2:保留UPDATE CURRENT_TIMESTAMP配置
前提:两个线程并发
线程1:
- 1. 开启事务
- 2. 读取表select count(1) from t_test 结果为0
- 3. 阻塞线程让线程2执行
- 4. 更新表update t_test set AMOUNT = 5 返回执行的行数为1
- 5. 读取表select count(1) from t_test 结果为1
- 6. 事务结束
线程2:
- 1. 开启事务
- 2. 插入数据 insert into t_test (AMOUNT) values (10)
- 3. 事务结束
情景3:去除UPDATE CURRENT_TIMESTAMP配置
前提:两个线程并发
线程1:
- 1. 开启事务
- 2. 读取表select count(1) from t_test 结果为0
- 3. 阻塞线程让线程2执行
- 4. 更新表update t_test set AMOUNT = 10 返回执行的行数为1
- 5. 读取表select count(1) from t_test 结果为1
- 6. 事务结束
线程2:
- 1. 开启事务
- 2. 插入数据 insert into t_test (AMOUNT) values (10)
- 3. 事务结束
分享到:
相关推荐
基于Java的网吧管理系统,MySQL数据库,JDBC编程! 基于Java的网吧管理系统,MySQL数据库,JDBC编程! 基于Java的网吧管理系统,MySQL数据库,JDBC编程! 基于Java的网吧管理系统,MySQL数据库,JDBC编程! 基于Java...
MySQL安装详细教程!!!
MySQL驱动包--最新!!!! MySQL驱动包--最新!!!! MySQL驱动包--最新!!!!
MySQL的可重复读(Repeatable Read)隔离级别是其事务管理机制的一部分,旨在解决数据库并发操作中的一些问题,如脏读、不可重复读和幻读。然而,标题中提出的问题在于,可重复读隔离级别是否能完全防止幻读。在这个...
mysql学习笔记!!!!!!!!!!!!!!!!!!! mysql学习笔记!!!!!!!!!!!!!!!!!!! mysql学习笔记!!!!!!!!!!!!!!!!!!! mysql学习笔记!!!!!!!!!!!!!!!...
MYSQL数据库大进级,是非常全面的MYSQL数据库进阶学习资料!
读提交怎么解决幻读问题 WHERE a > 1 and b=1 ORDER BY c 建立索引 如何建立联合索引 比较效率COUNT(1)、COUNT(*)、COUNT(主键)、COUNT(字段) B+树可以并发修改吗 B+树是可以并发修改的。 B+树是MySQL默认的存储...
三、MySQL 是如何解决幻读的 如果你看到了这篇文章,那么我会默认你了解了 脏读 、不可重复读与可重复读。 1. 多版本并发控制(MVCC)(快照读) 多数数据库都实现了多版本并发控制,并且都是靠保存数据快照来实现的...
决对好用的。!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
MySQL数据库提供了很多函数包括: 数学函数:数学函数主要用于处理数字,包括整型、浮点数等。 字符串函数:字符串函数是MySQL中最常用的一类函数,字符串函数主要用于处理表中的字符串。 日期和时间函数:MySQL的...
串行化级别是最高的隔离级别,它通过强制事务按照序列顺序执行,从而彻底解决了幻读问题,但代价是牺牲了一定的并发性能。 为了进一步理解,我们可以参考《高性能MySQL(第三版)》中的描述,书中将幻读定义为当一...
简洁版的mysql,非常好用,安装就可使用,谢谢使用!
由于需要重置mysql超级管理员root帐号的密码,在网上搜到的那种在命令行使用“mysqld-nt --skip-grant-tables”命令方法的,尝试N次都失败了! 幸好最终发现了这个重置mysql密码的视图操作工具,不能独享,特分享...
mysql操作文档!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!...
整理:MySQL从创建、数据类型、更新、查询、删除、函数到约束 还有每题都有案例,从头到尾的那种 这个是下载xmind文件,如果不需要,可以查看我发的
温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作。 2)逻辑备份 对数据库逻辑组件(如:表等数据库对象)的备份 1.以sql语句的形式,把库,表结构,表数据保存下来。 数据库的备份策略 完全备份...
有关Mysql之前有单独写过几篇文章•一文详解脏读、不可重复读、幻读•一文详解MySQL的锁机制•手把手教你分析解决MySQL死锁问题•看一遍就懂:MVCC原理详解•MySQL索引经典15问!之所以单独写,是因为这几块内容比较...
vc++进行连接sql的Demo(类似一个mysql客户端,相当强大!)