事物是什么?

书上说:事物作为一个不可分割的逻辑单元而被执行的一组sql语句,如果有必要,他们的执行效果可以被撤销。

我的理解:上面的这段话是《mysql技术内幕》对事物所下的定义。好高大上的样子,似乎不怎么看得懂!个人的观点是事物是一种机制,这种机制能够保证在一组的sql语句要么都成功执行、要么都不执行!

事物这么好,是否都支持?

答案是是否定的,和mysql的存储引擎有关。目前只有innodb、fclcon存储引擎支持,myisam 、memory存储引擎都不支持事物

事物的具体技术细节

1、事物而言有两种模式,自动提交模式(默认的模式)和非自动提交模式!

什么是自动提交模式?

这种模式会在每一条语句执行完之后把它作出的修改立刻提交给数据库,并使之永久化!事实上,这相当于把每一条语句当做一个事物来执行!

个人理解:由于在自动提交模式下,每执行一条sql语句都会被当做一个事物自动提交或者回滚,这样话,我们就不能保证一组sql的语句成功的提交或者回滚了。怎么办呢?这就提提现出来了start transactioin的作用了。

start transaction的主要作用,就是挂起自动提交模式。所谓挂起自动提交模式,就是当我们明确的使用了commit语句时才将修改永久的写入数据库。

什么是非自动提交模式?

任何的语句(其中一些语句例外,如start transaction……,也就是隐式提交事物的那些语句除外)都将成为该事物中的一部分,直到你发出一条commit语句或者rollback语句来提交或者撤销它为止!

举例说明:

此时还没有进行commit,开启另外一个窗口进行查询:

直到A窗口明显是进行了commit之后,在B窗口才真正的出现了添加的 数据!

2、事物的隔离性

所谓事物的隔离性就是指:一个事物何时才能看到另外一个事物所作出的修改。

由于隔离级别的不同可能会出现各种各样的问题,常见的问题如下:

脏读:A事物在修改完一条数据,还没有进行提交,而B事物已经读取到了该条数据

幻读:A事物插入一条数据,还没有commit,而B事物已经独到了新增的这条数据

综上所述,究其原因是因为,B事物读到了其他事物还没有提交的数据。为了解决上述的一些问题,mysql的innodb引擎提供了4个事物的隔离级别?、

READ UNCOMMITED 允许某个事物看到其它事物尚未提交的数据改动!

READ COMMITED 只允许事物看到其他事物已经提交过的数据改动!

REAPEATABLE READ 顾名思义是可重复读的意思,如果事物执行了统一条select语句,其结果是相同的,即使有其他事物在同时插入或者修改该数据行看到的结果也是一样的!这个是mysql的默认隔离级别!这里我们重点说一下!

举例说明:

a、同事打开A和B两个窗口,查看事物的隔离级别,两个事物的隔离级别都是可重复读!

b、BankAccount表中的建表语句和初始数据如下:

c、A、B窗口中同时挂起自动提交!

d、在A、B窗口分别执行如下操作!

通过上面的实验我们可以知道,即使是A窗口已经commit了,那么B窗口读到的仍然是start transaction之前的数据,并没有读到commit之后那两条新增加的数据

SERIALIZABLE,这个隔离级别同REAPEATABLE READ非常的相似,但是对事物的隔离更加的彻底,某个事物证在读去的数据时不允许其他事物进行修改的,知道该事物完成时候!(个人认为和加上了写锁的效果类似)

3、哪些sql语句会隐式的提交当前事物呢?

上面的我们有所过有些语句是不能放在事物中的,它会隐式的提交当前事物,比如之前提到的事物的嵌套,start transaction 中又进行了start transaction

一般来说下面几个方面的语句是会隐式的提交当前事物的:

DDL(Data Defined Language)语句:好专业的样子,其实就是数据的定义语句,常见的有:

create databases(创建数据库)

drop databases(删除数据库)

create table (创建表)

drop table(删除表)

alter table (修改表结构)

rename table (为表重命名)

truncate table(清空表)

create index(创建索引)

drop index(删除索引)

此外关于锁定和解锁的相关操作也会提交当前事物:

lock tables(锁定表)

unlock tables(解锁表)

主要参考文献

《mysql技术内幕》

以上的观点,如有纰漏清高手不吝赐教!

mysql一条sql是一个事物么_mysql 事物浅析相关推荐

  1. mysql 两条sql合并_mysql 如何将两条sql的结果合并到一列,

    想要达到这样的效果 两条sql 只有一个 card.type 条件不一样 0,于1 的区别 , 最后希望结果等于 comp.comp_info_id, comp.comp_name, card.sch ...

  2. MySQL 一条sql添加多个索引或添加多个列(字段)

    MySQL 一条sql添加多个索引或添加多个列(字段) MySQL 一次添加多个索引 ALTER TABLE  table_name ADD INDEX idx1 ( `aaa`), ADD INDE ...

  3. MySQL一条SQL语句查询多个科目的成绩

    MySQL一条SQL语句查询多个科目的成绩 SELECT pn.name,c.`cname`,SUM(CASE WHEN ps.coid='1' THEN sname END )AS 'domain' ...

  4. mysql 一条sql 事务_MySQL的事务

    MySQL中事务是一个最小的不可分割的工作单元,事务能保证一个业务的完整性 一个业务中有多条sql语句,这些sql语句必须同时成功或同时失败,这时需要要事务来保证这个要求. 例如:a从自己的银行卡上转 ...

  5. MYSQL —— 一条SQL在MySQL中是如何执行

    文章目录 1.MySQL的内部组件结构(部分参考极客时间) 1.1.Server层 1.2.Store层 1.3.演示的DDL: 2.连接器 3.查询缓存(8.0已移除) 4.分析器(先词法后语法) ...

  6. Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例

    如何用一条sql语句实现批量更新?mysql并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现. 代码如下: UPDATE mytable SET myfield = CASE id WHE ...

  7. mysql语句统计总数_一条sql语句实现统计查询_MySQL

    bitsCN.com 一条sql语句实现统计查询 如图:程序员在进行如下的统计时,现在提供两种实现方案: 方案一:运用 SEKECT CASE WHEN EXPLAIN SELECT count(*) ...

  8. mysql查询数量语句_mysql语句统计总数_一条sql语句实现统计查询_MySQL

    bitsCN.com 一条sql语句实现统计查询 如图:程序员在进行如下的统计时,现在提供两种实现方案: 方案一:运用 SEKECT CASE WHEN EXPLAIN SELECT count(*) ...

  9. mysql用一条sql语句删除重复记录_mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句...

    正好想写一条删除重复语句并保留一条数据的SQL,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 .如下: 表字段和数据: SQL语句: DELETE FROM`user`WHE ...

  10. oracle统计一个班男生女生,一条sql统计一个班级的男女人数

    有一个 学生记录的表student,形式如下:  name  class sex  1 a 男 2 b 女 3 c 男 4 a 男 5 a 女 6 a 男 --  现要统计每个班级的男女人数,结果如下 ...

最新文章

  1. python 报错 AttributeError: type object ‘datetime.datetime‘ has no attribute ‘datetime‘
  2. 比较windows phone程序启动和android程序启动原理
  3. JavaWeb——内置对象session与httpSession对象是同一个东西么?
  4. 笔记 - Ali Cloud 块存储简介
  5. 社交网络图中结点的“重要性”计算 (30 分)【最高效解法】
  6. linux系统做的小游戏,2007最新 100个Linux系统上的小游戏汇集
  7. 杨辉三角变形(高效解析)
  8. 计算机跨考土壤学,[北京林业大学]2005年土壤学复试办法_跨考网
  9. Intellij IDEA 添加jar包的三种方式
  10. DirectX Repair
  11. 360度 EC11 旋转编码器模块 数字脉冲电位器
  12. 推荐十款现今最受欢迎的数据可视化工具,供你参考
  13. 1.49万件区块链专利全景:BATJP占26%,游戏类迎突破
  14. Prisma初体验【逆向生成数据模型】
  15. 躲开混脸熟的车型,一文带你去看2019上海车展里的新面孔
  16. 【9种优化算法比较】CGO、SCA、GWO、CSA、SSA、HHO、WOA、PSO、TSO智能优化算法比较(Matlab代码实现)
  17. 从键盘上输入两个字符串,将两个字符串首尾相连接后,再输出新的字符串(c语言)
  18. 玉米社:竞价推广优化怎么做?竞价推广优化技巧
  19. matplotlib.pyplot 库(一)
  20. R语言回归分析-异常观测值

热门文章

  1. 去哪儿2015校园招聘产品经理面试题
  2. Android笔记-Felix
  3. 阿里云视频点播解密DecryptKMSDataKeyRequest爬坑
  4. 网页自动采集之内涵吧内涵段子自动采集
  5. 一些有趣但少有人知的 Python 特性
  6. 12、Hadoop框架MapReduce 统计人数、总分、关联
  7. SharpDevelop安装与配置
  8. 【JAVA SE】三万字终极魔典 面向对象编程深度讲解(包+继承+多态+抽象类+接口 全面剖析)
  9. 转:心理学相关经典书籍
  10. 干涉法测微小量(牛顿环测透镜的曲率半径)