mysql查询开启事务_MySQL中的查询事务问题
之前帮同学做个app的后台,使用了MySQL+MyBatis,遇到了一个查询提交的问题,卡了很久,现在有时间了来复盘下
环境情况
假设有学生表:
USE test;
CREATE TABLE `student` (
Id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
Name varchar(20) NOT NULL,
Grade int NOT NULL
)
mybatis项目目录的大致结构为:
+---src
| +---main
| | +---java
| | | | Test.java
| | | |
| | | +---pojo
| | | | Student.java
| | | |
| | | \---dao
| | | IStudentDao.java
| | |
| | \---resources
| | | log4j.properties
| | | mybatis-config.xml
| | |
| | \---mappers
| | StudentMapper.xml
Test.java
import dao.IStudentDao;
import pojo.Student;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Test {
public static void main(String args[]) throws Exception{
String resource ="mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession();
IStudentDao studentDAO = sqlSession.getMapper(IStudentDao.class);
Student currentStudent;
currentStudent = studentDAO.getStudentById(1);
System.out.println(currentStudent);
Thread.sleep(1000 * 30);
currentStudent = studentDAO.getStudentById(1);
System.out.println(currentStudent);
}
}
Student.java
package pojo;
public class Student {
private int id;
private String name;
private int grade;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getGrade() {
return this.grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
@Override
public String toString(){
return
"id = " + id + "\t" + "name = " + name + "\t" + "grade = " + grade + "\t";
}
}
IStudentDao
package dao;
import org.apache.ibatis.annotations.Param;
import pojo.Student;
public interface IStudentDao {
public Student getStudentById(@Param("studentId") int studentId);
}
mybatis-config.xml
StudentMapper.xml
SELECT id AS id, name AS name, grade AS grade
FROM student
WHERE id = #{studentId} ;
问题复盘
在第一次查询后,主线程暂停30秒,此时在MySQL WorkBench中修改了原来的数据,将“张三”变成“张三123”,主线程恢复后数据并没有任何变化。
开始以为是缓存问题,遂在mybatis-config.xml中禁用一级缓存:在configuration标签中,在 properties标签之后加入
问题依旧(注意看时间的变化,确实进行了更新,查询的数据确实没有变化)
16:03:43UPDATE test.student SET name = '张三123' WHERE id = 11 row(s) affected Rows matched: 1 Changed: 1 Warnings: 00.062 sec
开启mysql的查询日志比较差别
mysql> set GOLBAL general_log=on;
mysql> show variables like %general%;
注意:在我们的MyBatis中autocommit被设置为0,MySQL WorkBench中autocommit被设置为1
此时重新还原数据库数据,在Test.java手工加入提交
currentStudent = studentDAO.getStudentById(1);
sqlSession.commit();
System.out.println(currentStudent);
依然无效!!!
回顾一下,自动提交的问题确实存在,思路并没有问题。因此查询mybatis文档。
需要加入强制提交参数 true
currentStudent = studentDAO.getStudentById(1);
sqlSession.commit(true);
System.out.println(currentStudent);
加入后得到正确结果\:
mysql查询开启事务_MySQL中的查询事务问题相关推荐
- mysql慢日志查询的阈值_mysql慢日志查询
慢日志查询作用 慢日志查询的主要功能就是,记录sql语句中超过设定的时间阈值的查询语句.例如,一条查询sql语句,我们设置的阈值为1s,当这条查询语句的执行时间超过了1s,则将被写入到慢查询配置的日志 ...
- mysql正确打开方式_MySQL中MVCC的正确打开方式
最近在学习MySQL中的MVCC,看了网上的各种版本,什么创建版本号.删除版本号,一开始看的时候,好像很对的样子,但实际上很多都是错误的.经过好几天的查阅对比,在几篇博客的帮助下,才算是觉得正确理解了 ...
- mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天
mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...
- 如何处理SQL Server事务复制中的大事务操作
如何处理SQL Server事务复制中的大事务操作 事务复制的工作机制 事务复制是由 SQL Server 快照代理.日志读取器代理和分发代理实现的.快照代理准备快照文件(其中包含了已发布表和数据库对 ...
- mysql同步三张表如何用事务_MySQL 多表查询与事务的操作
表连接查询 什么是多表查询 # 数据准备 # 多表查询的作用 * 比如:我们想查询孙悟空的名字和他所在的部门的名字,则需要使用多表查询 # 如果一条 SQL 语句查询多张表,因为查询结果在多张不同的表 ...
- mysql中怎么查询单行单列_MySql中的子查询-结果单行单列
MySQL是开源免费和功能多面的小型数据库,MySQL也是目前流行通用的关系型数据库,已经被 Oracle 收购了.随着版本更新升级,加入一些高级功能,MySQL6.x 版本也开始收费.不过本教程将使 ...
- php mysql 时间戳查询_mysql中时间查询函数(包括时间戳)
mysql中时间查询函数(包括时间戳) 这些函数都是MySQL自带的,可以直接使用在PHP写的MySQL查询语句中哦 1-CURDATE()或CURRENT_DATE()和CURTIME()或CURR ...
- mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...
这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...
- mysql的英文字母_MySQL中查询的有关英文字母大小写问题的分析
mysql数据库在做查询时候,有时候是英文字母大小写敏感的,有时候又不是的,主要是由mysql的字符校验规则的设置决定的,通常默认是不支持的大小写字母敏感的. 1. 什么是字符集和校验规则? 字符集是 ...
最新文章
- 华为、小米的新手机用了更多AI,到底谁更胜一筹?
- 用C编写的诙谐幽默的关机程序。
- 编译安装LNMP Centos 6.5 x64(6.6 x64) + Nginx1.6.0 + PHP5.5.13 + Mysql5.6.19
- 转: Fedora 17 安装flash插件
- Java 面向对象的设计思维
- php没有上级分类的联动,ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单...
- Linux-Shell编程之数组操作
- c语言不借助其他变量交换a b的值,C++面试题之数a、b的值互换(不使用中间变量)...
- 计算机会计凭证审核,记账凭证的审核
- Linux系统用户添加到用户组
- 计算机网络五层模型(ing)
- python定义一个字符串变量_python基础入门语法和变量类型(一)
- 爱因斯坦:三篇著名演讲
- 互联网没有基业长青?(转)
- 那些老牌互联网公司现在都混得怎样了?
- 加载调用本地百度地图资源,附地图下载器及黑龙江省1-16级瓦片地图,加载显示marker
- 巴西龟饲养日志----半年捉鱼经验总结
- dk 识别物体出现的问题
- 使用git拉取项目、创建分支、提交代码教程
- 机器学习笔记 - 时间序列使用机器学习进行预测
热门文章
- 服务器ssr进程启动怎么运行,要SSR? NUXT项目从初始化到部署服务器流程全记录
- Java反射基础(三)--Methods对象的使用
- mysql分页查询报错,及解决
- 水晶报表中对某一栏位值进行处理_合并报表——非同一控制下的企业合并amp;同一控制下的企业合并...
- 计算机论文的的格式,计算机论文格式模板.doc
- cad与连接mySQL数据库_跨服务器操作数据库?其实很简单!(下)
- 枚举算法称硬币C语言,【算法系列之枚举】称硬币
- 静态ip ssh无法登录_识别动静态IP的技巧
- Java 启动和停止界面_一文详解各种花里胡哨的Java调试技巧,多图预警,记得收藏...
- minitab怎么算西格玛水平_六西格玛黑带培训工具因子分析的使用