本文主要包括一下内容:

(1) 事务的概念与ACID

(2)事务的隔离级别

(3)MySQL中的事务

1. 事务与ACID

理解事务是其它高级概念的基础。事务:事务就是一组原子性的SQL查询,或则说是一个独立的执行单元,要么全部成功,要么全部失败,如果失败了就回滚到事务之前的状态。

下面来理解一下数据库中关于ACID的概念:原子性、一致性、隔离性、持久性。

(1)原子性:事务中的操作是一个不可分割的整体单元,要么全部都做,要么全部不做。

(2)一致性:事务执行前后数据库都必须处于一致性状态。

(3)隔离性:通常来说,一个事物所做的修改在最终提交之前对其余事务是不可见的。这里就涉及到事务的隔离级别的问题了。

(4)持久性:一旦事务提交完成,修改就是永久的,即使服务器宕机也不会影响到。

为了更好地理解ACID,下面以银行账户转账为例进行说明:-- 开始事务START TRANSACTION;

-- 查询支票账户余额+

SELECT balance FROM checking WHERE customer_id = 10233276;+

-- 将支票账户减去200UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;

-- 将余额账户增加200UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;

-- 提交事务更新COMMIT;

原子性:要么完全提交(10233276的checking余额减少200,savings 的余额增加200),要么完全回滚(两个表的余额都不发生变化)

一致性:这个例子的一致性体现在 200元不会因为数据库系统运行到第3行之后,第4行之前时崩溃而不翼而飞,因为事物还没有提交。

隔离性:允许在一个事务中的操作语句会与其他事务的语句隔离开,比如事务A运行到第3行之后,第4行之前,此时事务B去查询checking余额时,它仍然能够看到在事务A中被减去的200元(账户钱不变),因为事务A和B是彼此隔离的。在事务A提交之前,事务B观察不到数据的改变。

持久性:这个很好理解,就是事务提交之后修改就是永久的。

事务跟锁一样都会需要大量工作,因此你可以根据你自己的需要来决定是否需要事务支持,从而选择不同的存储引擎。

2. 事务的隔离级别

SQL定义了四种隔离级别,用来限定事务内哪些数据是可见的。很明显低级别的隔离级别拥有更高的并发性,系统开销也更加小,但是随之而来的就是带来的数据安全性问题。

Read Uncommitted(未提交读)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。读取未提交的数据,也被称之为脏读(Dirty Read)。该级别用的很少。

Read Committed(提交读)

这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变,换句话说就是事务提交之前对其余事务不可见。这种隔离级别也支持不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select查询可能返回不同结果。

Repeatable Read(可重复读)

这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

Serializable(可串行化)

这是最高的隔离级别,它强制事务都是串行执行的,使之不可能相互冲突,从而解决幻读问题。换言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

MySQL中实现这四种隔离界别可能产生的问题如下:

3. MySQL中的事务

MySQL中默认的是采取自动提交模式(AutoCommit),也就是说只要不是显示的开启一个事务,每个查询操作都被当做一个事务执行提交的操作。

我们可以通过设置 AUTOCOMMIT 变量来启动或则禁用自动提交模式。

设置1表示启用AUTOCOMMIT,0表示禁用AUTOCOMMIT。

本文主要包括一下内容:

(1) 事务的概念与ACID

(2)事务的隔离级别

(3)MySQL中的事务

mysql事务隔离级别详解_高性能MySQL-详解事务与隔离级别相关推荐

  1. mysql第五章项目二_高性能MySQL笔记 第5章 创建高性能的索引

    索引(index),在MySQL中也被叫做键(key),是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化最有效的手段. 5.1 索引基础 索引的类型 索引是在存储引擎层而不是服务器层 ...

  2. mysql 集群操作系统_高性能MySQL集群详解(二)

    一.通过Keepalived搭建MySQL双主模式的高可用集群系统 1.MySQL Replication介绍: MySQL Replication是MySQL自身提供的一个主从复制功能,其实也就是一 ...

  3. mysql explain详解_数据库mysql(1)——B+TREE索引原理

    一.B+Tree索引详解 1.什么是索引? 索引:加速查询的数据结构. 2.索引常见数据结构: #1.顺序查找: 最基本的查询算法-复杂度O(n),大数据量此算法效率糟糕. #2.二叉树查找(bina ...

  4. 高性能mysql总结笔记_高性能MySQL第三本笔记总结(上)

    无论何时,只要有多个查询需要在同一个时刻修改数据时,就会有并发问题.MySql主要在服务器层与存储引擎层进行并发控制. 假设数据库中国一张邮箱表,每个邮件都是一条记录.如果某个客户正在读取邮箱,同时其 ...

  5. mysql技术innodb存储引擎读后感_《Mysql技术内幕-InnoDB存储引擎》读书笔记 (一)...

    @(Mysql) 官方数据库 下载 导入/data/mysql57/bin/mysql --socket /data/mysql3306/mysql.socket -uroot -ppassword1 ...

  6. mysql数据库工程师网易微专业_网易MySQL数据库工程师微专业学习笔记(五)

    一.mysql数据库中的存储引擎 mysql在创建数据表时可以通过engine关键字设置存储引擎的类型,也可以通过alter命令来修改表的存储引擎.可以通过show engines命令来查看当前mys ...

  7. 如何给mysql表添加百万条数据_给mysql一百万条数据的表添加索引

    直接alter table add index 添加索引,执行一个小时没反应,并且会导致锁表:故放弃该办法,最终解决办法如下: 一.打开mysql 命令行客户端 这里我们那可以看到导出的数据文件所存放 ...

  8. 老男孩mysql高级专业dba实战课程_老男孩MySQL高级专业DBA实战课程/高级运维DBA课程/MySQL视频教程下载...

    课程名称 老男孩MySQL高级专业DBA实战课程/高级运维DBA课程/MySQL视频教程下载 课程目录 第一部 MySQL基础入门(21节) 第二部 MySQL多实例安装与企业应用场景(10节) 第三 ...

  9. mysql索引优化是什么意思_理解MySQL——索引与优化

    写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将 ...

最新文章

  1. 网络安全系列之五十 对Web主目录进行备份
  2. Hey, 看看小程序的page-frame.html把~
  3. 「 每日一练,快乐水题 」258. 各位相加
  4. BZOJ 4802: 欧拉函数(大数因数分解算法 Pollard_rho 和素数测试算法 Miller_Rabin)
  5. php数组去空函数怎么写,分享php数组去除空值函数
  6. python安装gz文件_python tar.gz怎么安装-问答-阿里云开发者社区-阿里云
  7. mysql服务等待应答超时_从mysql备份报错来看net_read_timeout 和net_write_timeout参数
  8. 分布式事务中间件Seata的安装
  9. Directx11教程(65) 渲染到纹理
  10. CST — 电磁及EMC仿真工具
  11. 史丰收速算 (蓝桥杯)
  12. 《蜥蜴脑法则》读后感
  13. 如何添加旺旺客户,淘宝店铺左侧代码
  14. Colorful Slimes( UPC 5594: 二维dp+思维)
  15. BrightLineFalsingManager防误触问题
  16. 巴菲特50年投资之道
  17. Python程序设计基础第七章笔记:字符串
  18. 【JS逆向系列】x96参数与jsvmp初体验
  19. 计算机病毒实验教程pdf,计算机病毒实验手册4-5-9-10-8-v40.pdf
  20. 猪八戒网获26亿融资 计划做全国最大在线电商平台

热门文章

  1. ORACLE中的自治事务
  2. 利用R和Octave求解线性方程组
  3. 【codevs1041NOIP01TG】Car的旅行路线,最短路中的数学题
  4. linux c 文件拷贝函数,Linux C函数库参考手册
  5. 2017.10.9 DZY Loves Math V 失败总结
  6. 树的重心 背诵用模板
  7. 【英语学习】【WOTD】remittance 释义/词源/示例
  8. 【Python】Python3.7.3 - 闭包Closure技术
  9. 【英语学习】【Daily English】U01 Greetings / L03 Have we met before?
  10. (四)基于Multisim的超外差接收系统:检波器的设计