博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySql协议讲解-事务协议篇
阅读量:6257 次
发布时间:2019-06-22

本文共 1212 字,大约阅读时间需要 4 分钟。

hot3.png

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://my.oschina.net/alchemystar/blog/837731

你可能感兴趣的文章
Error : Weblogic Maven Plugin deployment WebLogic 12c
查看>>
W3C小组宣布:HTML5标准制定完成
查看>>
dispatch_group_async 使用详解
查看>>
3d引擎列表
查看>>
[Ant] Ant之MacroDef—“宏
查看>>
WEB架构师成长之路-架构师都要懂哪些知识 转
查看>>
C#中使用TCP通信
查看>>
Swift入门篇-swift简介
查看>>
05 继承
查看>>
弧度和角度的转换
查看>>
[leetcode]Unique Paths II @ Python
查看>>
nginx源码分析之hash的实现
查看>>
数据结构快速回顾——二叉树 解幂子集问题
查看>>
选择排序
查看>>
使用微软 URL Rewrite Module 开启IIS伪静态
查看>>
浅谈UML中类之间的五种关系及其在代码中的表现形式
查看>>
原创:CentOS6.4配置solr 4.7.2+IK分词器
查看>>
cocos2d(3.0)一些基础的东西
查看>>
jQuery动画animate方法使用介绍
查看>>
自适应网页设计(Responsive Web Design)
查看>>