事务(Transaction)可以看作是一组原子性的SQL查询,或者说是一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。事务内的语句执行要么全部执行成功,要么全部执行失败。

1.事务的特征(ACID)

原子性(atomicity):也可称作不可分割性,一个事务就是一个不可分割的最小工作单元,整个事务中的操作是一个整体,要么全部提交成功,要么全部失败,失败的话,会回滚(Rollback)到事务开始前的状态;不存在一部分成功,而一部分失败,这就是事务的原子性的特征。

一致性(consistency):数据库总是从一个一致性的状态转换到另外一个一致性的状态,在事务开始之前和事务结束以后,数据库的完整性没有被破坏。

隔离性(isolation):两个事务之间,一个事务做的修改在提交之前,对其他事务是不可见的,两个事务是彼此独立隔离开的。

持久性(durability):事务作了提交之后,修改后的数据会永久保存到数据库中,会留在硬盘中,往后即使系统崩溃,数据也不会丢失。

其中隔离性又分为四种隔离级别,每一种级别都规定了一个事务中所做的修改,哪些在事务内和事务间是可见的,哪些是不可见的。较低级别的隔离通常可以执行更高的并发,系统的开销也更低。

read uncommitted(未提交读):未提交读级别,事务中的修改,即使没有提交,对其他事务也是可见的。事务可以读取未提交的数据,也称作脏读(dirty read),由于有很多缺点,实际应用中很少使用。

read committed(提交读):提交读可以解决脏读问题,大多数数据库系统的默认隔离级别都是提交读(但是mysql数据库却不是)。read committed 满足前面提到的隔离性的简单定义:一个事务开始时,只能“看见”已经提交的事务所做的修改。换句话说,一个事务从开始直到提交之间,所做的任何修改对其他事务都是不可见的。这个级别有时候也可叫做不可重复读(nonrepeatable read),因为两次执行同样的查询,可能会得到不一样的结果。

repeatable read(可重复读):可重复读可以解决脏读和不可重复读的问题,该级别保证了在同一个事务中多次读取同样记录的结果是一致的。但是理论上,可重复读隔离级别还是无法解决另外一个幻读(phantom read)的问题。所谓幻读,指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围插入了新是记录,当之前的事务再次读取该范围的记录时,会产生幻行(phantom row)。innoDB和XtraDB存储引擎通过多版本并发控制(MVCC,Multiversion concurrency control)解决了幻读问题;可重复读是mysql的默认事务隔离级别。

serializable(可串行化):可串行化是最高的隔离级别,它通过强制事务串行执行,避免了前面说的幻读问题。简单来说,seriazable会在读取的每一行数据上加锁,所以可能导致大量的超时和锁争用问题,实际应用中也很少应用这个隔离级别,只有在非常需要确保数据的一致性而且可以接受没有并发的情况下,才考虑到该级别。

ANSI SQL隔离级别
隔离级别 脏读可能性 不可重复读可能性 幻读可能性 加锁读
read uncommitted yes yes yes no
read committed no yes yes no
repeatable read no no yes no
serializable no no no yes

2.事务操作

隐式(自动)事务:没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert、update、delete
显式事务:具有明显的开启和结束

使用显示事务:

开启事务:start transaction

开启事务的语句之后,可以开始写相关的增删改操作

可以设置回滚点:savepoint  回滚点名称;

修改完后提交事务 commit (transaction),mysql默认采用自动提交(autocommit),可以通过设置autocommit来启用或者禁用自动提交模式

show variables like ‘autocommit’;

set autocommit=0或者1,其中0表示off,1表示on

提交失败的话,回滚事务 rollback 或者回滚到指定的地方roll back to 回滚点名称

事务结束:end transaction

补充:并发事务

1、事务的并发问题是如何发生的?
多个事务 同时 操作 同一个数据库的相同数据时
2、并发问题都有哪些?
脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据
不可重复读:一个事务多次读取,结果不一样
幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是 其他事务“插入”的数据
3、如何解决并发问题
通过设置隔离级别来解决并发问题。

本文内容参考了书籍《高性能MYSQL(第三版)》作者:Baron schwartz

mysql------事务相关推荐

  1. DB-MySQL:MySQL 事务

    ylbtech-DB-MySQL:MySQL 事务 1.返回顶部 1. MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人 ...

  2. ci mysql 事务_MySQL事务-学习笔记

    MySQL事务-学习笔记 MySQL事务 事务的意义 案例:银行转账过程 A向B转账500,A原来有1000,B有500. 分析: SQL处理过程: A 减少 500 B 增加 500 以上两点必须同 ...

  3. 面试官灵魂的一击:你懂MySQL事务吗?

    " 今天无聊来撩一下MySQL事务,希望你们喜欢~ 目录 概念 隔离性与隔离级别 事务隔离的实现 事务启动方式 MVCC工作原理 总结 一.概念 事务到底是什么东西呢?想必大家学习的时候也是 ...

  4. Mysql 事务中Update 会锁表吗?

    Mysql 事务中Update 会锁表吗? 两种情况: 1.带索引 2.不带索引 前提介绍: 方式:采用命令行的方式来模拟 1.mysq由于默认是开启自动提交事务,所以首先得查看自己当前的数据库是否开 ...

  5. mysql 事务id_[转]MySQL 5.6 全局事务 ID(GTID)实现原理(一)

    http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html 在这篇文档里,我们可以知道全局事务 ID 的官方定义是: GTID = so ...

  6. Mysql事务字符集

    Mysql事务 Innodb存储引擎的中的事务完全服务ACID: 原子性.2.一致性.3.隔离性.4.持久性 理解上和oracle类似. 事务隔离级别 1.Read uncommitted 读未提交: ...

  7. mysql事务并发控制_mysql事务和多版本并发控制详解

    一.mysql事务 事务就是一组原子性的SQL查询,或者说一个独立的工作单元.如果数据库引擎可以成功执行该组全部语句,那么就执行该组语句.如果其中有任何一条语句不能执行,那么所有的语句都不会执行.也就 ...

  8. php mysql事务

    这里记录一下php操作mysql事务的一些知识 要知道,MySQL默认的行为是在每条SQL语句执行后执行一个COMMIT语句,从而有效的将每条语句独立为一个事务.但是,在使用事务时,是需要执行多条sq ...

  9. mysql事务四个安全级别_四个MySQL事务隔离级别的详细说明

    本文中的实验测试环境: Windows 10 + cmd + MySQL5.6.36 + InnoDB 首先,交易的基本要素(ACID) 1. 原子性: 事务开始后 2. 一致性(Consistenc ...

  10. 如果MySQL事务中发生了网络异常?

    一 前言 在我们运维MySQL的时候,总会遇到各种情况导致程序和MySQL之间的会话异常中断,比如 假如强制关闭应用 假如client机器突然崩溃宕机/断电 假如网络发生抖动/网卡发生故障 机房级别断 ...

最新文章

  1. android 添加附件功能,Android实现带附件的邮件发送功能
  2. 3.6 激活函数-深度学习-Stanford吴恩达教授
  3. 势能线段树/吉司机线段树-我没有脑子
  4. 90%的程序员都写错的算法-二分查找万能模版
  5. 如何融入到更积极的环境,促进技术提升
  6. java代码做repeat次运算,从键盘输入几个数,比最值
  7. 前端之旅,做一点有回报的事情
  8. Linux Bash Shell中的特殊参数含义
  9. 10月份出版图书《玩转虚拟机基于VMware+Windows》
  10. tf.one_hot()
  11. 15 个提高 Google 搜索效率的小技巧
  12. HTML实现直播礼物特效,抖音哪些礼物可以触发特效,抖音直播礼物特效大全
  13. Python学习记录—— 绘制百分比堆积柱状图
  14. Spring Security--基于注解访问控制 @Secured@PreAuthorize
  15. Mysql 快速生成日期时间维度表
  16. QT软件版本更改步骤
  17. Vue 事件修饰符.self的用法
  18. javascript数组——新建数组、访问数组、遍历数组的方法、数组对象的方法、冒泡排序算法、json的正反序列化
  19. 电信中兴光猫ZXHN F650超管密码获取工具
  20. 震惊!!!郑州市一程序员在上班时趁着公司没人竟然在看......

热门文章

  1. 设计网页字体css,CSS教程 :网页字体及字体大小的设计
  2. Win11如何添加过时硬件?Win11添加过时硬件的方法
  3. ros加载编译opencv-3.4.9,编译安装opencv-3.4.9
  4. python有关迭代器和生成器的面试题_python面试题之生成器迭代器
  5. qtable sorting enable中文是按照什么顺序_作为雅思过来人,你有什么话想告诫雅思小白的?...
  6. 将vue项目打包部署到云服务器(傻瓜式宝塔面板)
  7. 案例-热点图(CSS3)
  8. 解决微信调整字体大小导致Html5页面混乱
  9. linux模板机配置文件,制作Centos 7.4操作系统模板机
  10. php 3des 兼容java,java版3des加密程序,可与php兼容