文档章节

MySql协议讲解-事务协议篇

无毁的湖光-Al
 无毁的湖光-Al
发布于 2017/02/13 17:18
字数 571
阅读 403
收藏 3

MySql协议讲解-事务协议篇

MySql事务协议主要是通过set autocommit、commit以及rollback这三个报文(命令)来实现的。

MySql事务协议交互图

事务交互

1.Client向DB发送set autocommit命令

autocommit,顾名思义,是否自动提交(事务)。如果设置为1,表明自动提交,设置为0,则是非自动提交,这样就隐式的开启了事务。
值得注意的是,一但运行了set autocommit这个命令,不管设置为1或者0,都会自动提交前一个事务。 当然了如果之前autocommit=0然后set autocommit=0这样相当于状态没改,所以不会提交前一个事务。

MySql的set variable命令

此命令通常是用来设置局部/全局变量用。也是一种com_query包,如下图所示: autocommit
##2.DB向Client返回Okay包 Okay包已经在之前的博客中讲述过,在此不再赘述。 ##3.Client向DB发送SQL语句 SQL语句即是Com_query包,如果是insert、update或者delete则返回okay包。在此的okay包比起前面的包多了一些信息,下面进行详解。

insert、update或者delete

okay包会返回影响的行数

insert、update或者delete在执行后,都会返回影响的行数。这是通过在okay包中的affectedRows返回。

public class OkPacket extends MySQLPacket{
    ......
    public long affectedRows;
    public long insertId;
    ......
}

last insert id

在insert执行后,OkPacket在其中的insertId返回last insert id,但是有些ORM框架(例如MyBatis)是通过select LAST_INSERT_ID()方法来获取的。
由于这个Id是存在mysql的session里面的,只要这个session没有被多线程复用,就不用担心last_insert_id被覆盖的问题。

select

SQL语句是select的话,则会返回ResultSet报文,这个在上一篇报文中已经讨论过。

重复上述过程

在一个事务内可以重复上述过程,知道有commit报文或者rollback报文被发送为止。

Commit/Rollback报文

Commit/Rollback报文也是一种com_query报文,如下图所示: commit_rollback
Commit报文发送后,DB进行事务提交,并返回okay报文。
Rollback报文发送后,DB进行事务回滚,并返回okay报文。

GitHub链接

https://github.com/alchemystar/Lancelot.git

原文链接

https://my.oschina.net/alchemystar/blog/837731

© 著作权归作者所有

共有 人打赏支持
无毁的湖光-Al
粉丝 318
博文 24
码字总数 33155
作品 0
浦东
后端工程师
MySQL 和 PostgreSQL 的全方位比较

这是一篇国外的文章,从 7 个方面详细阐述了 MySQL 和 PostgreSQL 这两个开源数据库之间的差异。 这 7 个方面包括: 架构 性能 ACID 事务 功能特性 授权协议 开发 文化 这篇文章没有任何偏向...

oschina
2012/08/16
6.3K
14
.NET简谈自定义事务资源管理器

在上一篇文章“NET简谈事务、分布式事务处理”中我大概总结了关于.NET中的事务处理方式和结合了WCF框架的简单应用。在事务性操作中我们的重点是能将数据进行可逆化,说白了就是能保证数据的A...

王清培
2012/01/02
0
0
「mysql优化专题」详解引擎(InnoDB,MyISAM)的内存优化攻略?(9)

上一篇我们讲了关于视图应用与优化,本篇我们讲解内存优化。本篇短小精悍,通俗易懂。 注意:以下都是在MySQL目录下的my.ini文件中改写。 一、InnoDB内存优化 InnoDB用一块内存区域做I/O缓存...

java进阶架构师
2017/12/17
0
0
博客阅读整理一

(部分文章是系列文章,可在原文博客查找) Java ClassLoader, JavaAgent, Aspectj Weaving一站式扫盲帖:主要总结了ClassLoader、java代理、反射相关的知识点 jdbc实现篇-源码:介绍了jdbc的源...

oO脾气不坏Oo
2015/10/17
80
0
MySQL 中基于 XA 实现的分布式事务

五、MySQL 中基于 XA 实现的分布式事务 5.1 XA协议 首先我们来简要看下分布式事务处理的XA规范 可知XA规范中分布式事务有AP,RM,TM组成: Xa主要规定了RM与TM之间的交互,下面来看下XA规范中...

阿里加多
07/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

设计模式之 明确责任 观察者模式 状态模式 责任链模式

观察者模式是任务分发的一种模式。 如果认为我们设计的系统的各个模块(或子系统)的最终目的是完成共同任务,那么这个任务如何分配到多个模块的就是我们遇到的第一个问题。简单设计场合我们...

backbye
14分钟前
2
0
14-利用思维导图梳理JavaSE-大汇总

14-利用思维导图梳理JavaSE-Java基础知识大汇总 主要内容 1.对象入门 2.一切都是对象 3.程序流程控制 4.初始化和消除 5.权限访问控制 6.复用类 7.多态 8.接口与抽象类 9.内部类 10.容器 11.异...

飞鱼说编程
49分钟前
5
0
利用Lombok编写优雅的spring依赖注入代码,去掉繁人的@Autowired

大家平时使用spring依赖注入,都是怎么写的? @Servicepublic class OrderService { @Autowired private UserService userService;} 是不是很熟悉的感觉?但是呢 如果你用...

HeyS1
56分钟前
25
0
IBATIS 写BLOB字段遇到的问题

1、 首先遇到的配置问题,通过设置typeHandler 来支持写入。接下来由此引出了事务的问题。 <typeHandler jdbcType="BLOB" javaType="[B" callback="org.springframework.orm.ibatis.support....

echo-neo
今天
1
0
37. Sudoku Solver

Description tags: backtrack,hash table difficulty: hard Write a program to solve a Sudoku puzzle by filling the empty cells.A sudoku solution must satisfy all of the following......

52iSilence7
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部