范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

一文详解MySQL事务和锁

  事务概述
  当多个用户访问同一份数据时,一个用户在更改数据的过程中,可能有其他用户同时发起更改请求,为保证数据库记录的更新从一个一致性状态变为另外一个一致性状态,使用事务处理是非常必要的,事务具有以下四个特性:  原子性(Atomicity):事务中所有操作视为一个原子单位,即对事务所进行的数据修改等操作只能是完全回滚或完全提交  一致性(Consistency):事务在完成时,必须使用所有的数据从一种一致性变更为另一种一致性状态,所有的变更都必须应用于事务的修改,以确保数据的完整性。事务的一致性由原子性、持久性和隔离性一起实现  隔离性(Isolation):一个事务中的操作语句所做的修改必须与其他事务所做的修改相隔离。在进行事务查看数据时,数据所处的状态,要么是被另一个并发事务修改之前的状态,要么是被另一并发事务修改之后的状态,即当前事务不会查询由另一个并发事务正在修改的数据。隔离性由 MySQL 锁机制实现  持久性(Durability):事务完成之后,所做的修改对数据的影响是永久的,即使系统重启或者出现系统故障,数据仍可恢复
  MySQL 提供了多种事务型存储引擎,如 InnoDB 和 BDB 等,而 MyISAM 不支持事务。为了支持事务,InnoDB 存储引擎引入了与事务处理相关的 REDO 日志和 UNDO 日志,同时事务依赖于 MySQL 提供的锁机制  1. REDO 日志
  事务执行时需要将执行的事务日志写入日志文件,对应的文件为 REDO 日志。当每条 SQL 进行数据更新操作时,首先将 REDO 日志写进日志缓冲区。当客户端执行 COMMIT 命令提交时,日志缓冲区的内容将被刷新到磁盘,日志缓冲区的刷新方式或者时间间隔可以通过参数 innodb_flush_log_at_trx_commit 控制
  REDO 日志对应磁盘上的 ib_logifleN 文件,该文件默认为 5MB,建议设置为 512MB,以便容纳较大的事务。MySQL 崩溃恢复时会重新执行 REDO 日志的记录,恢复最新数据,保证已提交事务的持久性  2. UNDO 日志
  与 REDO 日志相反,UNDO 日志主要用于事务异常时的数据回滚,具体内容就是记录数据被修改前的信息到 UNDO 缓冲区,然后在合适的时间将内容刷新到磁盘
  假如由于系统错误或者 rollback 操作而导致事务回滚,可以根据 undo 日志回滚到没修改前的状态,保证未提交事务的原子性
  与 REDO 日志不同的是,磁盘上不存在单独的 UNDO 日志文件,所有的 UNDO 日志均存在表空间对应的 .ibd 数据文件中,即使 MySQL 服务启动了独立表空间  事务控制语句
  在 MySQL 中,可以使用 BEGIN 开始事务,使用 COMMIT 结束事务,中间可以使用 ROLLBACK 回滚事务。MySQL 通过 SET AUTOCOMMIT、START TRANSACTION、COMMIT 和 ROLLBACK 等语句支持本地事务  START TRANSACTION | BEGIN [WORK] COMMIT [WORK] ROLLBACK [WORK] SET AUTOCOMMIT = {0 | 1}BEGIN | START TRANSACTION:开始事务  COMMIT:结束事务  ROLLBACK:回滚事务  WORK:SQL 语句  SET AUTOCOMMIT:是否自动提交,0 禁止,1 开启,默认为 1  事务隔离级别
  MySQL 定义了四种隔离级别,指定事务中哪些数据改变其他事务可见、哪些数据该表其他事务不可见。低级别的隔离级别可以支持更高的并发处理,同时占用的系统资源更少
  InnoDB 系统级事务隔离级别可以使用以下语句设置:  SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED; SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  查看系统级事务隔离级别:  SELECT @@global.tx_isolation;
  InnoDB 会话级事务隔离级别可以使用以下语句设置:  SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  查看会话级事务隔离级别:  SELECT @@tx_isolation;1. 读未提交
  在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。读取未提交的数据称为脏读(Dirty Read),即是:首先开启 A 和 B 两个事务,在 B 事务更新但未提交之前,A 事务读取到了更新后的数据,但由于 B 事务回滚,导致 A 事务出现了脏读现象  2. 读已提交
  所有事务只能看见已经提交事务所做的改变,此级别可以解决脏读,但也会导致不可重复读(Nonrepeatable Read):首先开启 A 和 B 两个事务,A事务读取了 B 事务的数据,在 B 事务更新并提交后,A 事务又读取到了更新后的数据,此时就出现了同一 A 事务中的查询出现了不同的查询结果  3. 可重复读
  MySQL 默认的事务隔离级别,能确保同一事务的多个实例在并发读取数据时看到同样的数据行,理论上会导致一个问题,幻读(Phontom Read)。例如,第一个事务对一个表中的数据做了修改,这种修改会涉及表中的全部数据行,同时第二个事务也修改这个表中的数据,这次的修改是向表中插入一行新数据,此时就会发生操作第一个事务的用户发现表中还有没有修改的数据行
  InnoDB 通过多版本并发控制机制(MVCC)解决了该问题:InnoDB 通过为每个数据行增加两个隐含值的方式来实现,这两个隐含值记录了行的创建时间、过期时间以及每一行存储时间发生时的系统版本号,每个查询根据事务的版本号来查询结果  4. 串行化
  通过强制事务排序,使其不可能相互冲突,从而解决幻读问题。简而言之,就是在每个读的数据行上加上共享锁实现,这个级别会导致大量的超时现象和锁竞争,一般不推荐使用  InnoDB 锁机制
  为了解决数据库并发控制问题,如走到同一时刻客户端对同一张表做更新或者查询操作,需要对并发操作进行控制,因此产生了锁  1. 锁的类型1.1 共享锁
  共享锁的粒度是行或者元组(多个行),一个事务获取了共享锁以后,可以对锁定范围内的数据执行读操作  1.2 排他锁
  排他锁的粒度与共享锁相同,一个事务获取排他锁以后,可以对锁定范围内的数据执行写操作
  有两个事务 A 和 B,如果事务 A 获取了一个元组的共享锁,事务 B 还可以立即获取这个元组的共享锁,但不能获取这个元组的排他锁,必须等到事务 A 释放共享锁之后。如果事务 A 获取了一个元组的排他锁,事务 B 不能立即获取这个元组的共享锁,也不能立即获取这个元组的排他锁,必须等到 A 释放排他锁之后  1.3 意向锁
  意向锁是一种表锁,锁定的粒度是整张表,分为意向共享锁和意向排他锁。意向共享锁表示一个事务有意对数据上共享锁或者排他锁。有意表示事务想执行操作但还没真正执行  2. 锁的粒度
  锁的粒度主要分为表锁和行锁
  表锁的开销最小,同时允许的并发量也是最小。MyISAM 存储引擎使用该锁机制。当要写入数据时,整个表记录被锁,此时其他读/写动作一律等待。一些特定的动作,如 ALTER TABLE 执行时使用的也是表锁
  行锁可以支持最大的并发,InnoDB 存储引擎使用该锁机制。如果要支持并发读/写,建议采用 InnoDB 存储引擎
  原文链接:https://www.cnblogs.com/Yee-Q/p/16209147.html?utm_source=tuicool&utm_medium=referral

T03入门微型电动车值得一谈让微型电动车驾控更有底气作为一款入门微型电动车,如果以电动车的角度去衡量,零跑T03的动力确实没什么看点。一台前置永磁同步单电机,大功率55kW,大扭矩155Nm。别看数据马力不大安逸的背后是努力与拼搏,是她和它三十而立的表哥,去年做了一个令家里人极端反对与不解的决定离开原本安逸的公司生活,开始自己办厂创业。后来有一次在向表哥询问职业方向时,我顺口问了他一句哥,如果当年厂没办起来,你会后悔综合续航400公里十万出头还能买到这样的电动车对电动车来说,人们最关注的就是它们的电池还有续航问题,电池决定了车辆是否安全,还有充电是否方便,而续航则决定了车辆出行半径的长短。在现在十万出头的电动车里,续航超过300公里的算正T03入门微型电动车值得一谈让微型电动车驾控更有底气作为一款入门微型电动车,如果以电动车的角度去衡量,零跑T03的动力确实没什么看点。一台前置永磁同步单电机,大功率55kW,大扭矩155Nm。别看数据马力不大为了过年,苏宁易购拼了春节越来越近,各大电商平台也忙碌了起来,纷纷推出年货节,不论是线上撒钱补贴,还是线下实体店打折狂欢,为了让大家买买买,可谓使尽全身解数。但要说花样,还是苏宁易购最多,就在近日,苏宁不试不知道!提拉塑颜精华真的很好用当我妈妈和我姥姥学会了发朋友圈之后,她俩每次出门玩儿都要咔咔咔互拍一堆照片回来。可况这俩大宝贝儿向来都是爱臭美的主儿,现在愈发地在乎穿着搭配了,还要根据当天的穿搭来配条项链镯子或者自如推出暖冬守护计划,用户长租公寓是刚需,自如很靠谱近期,为帮助在住房租赁行业风波中受影响的业主及租客,自如发布名为暖冬守护的计划,对受波及的业主和租客提供专项支持。近一个月,已有不少业主与租客参加了此项计划,在体验之后纷纷表示,还颠覆传统的动感设计,EMPOW55开启轻跑新浪潮大体上来看,中国品牌轿车的重心基本都在家用车市场上,一定程度上忽略了年轻一代的诉求个性动感跑车。也许大部分人会想,年轻人确实喜欢跑车,但跑车的价格,对于刚出社会的年轻人来说是遥不可3999元高性价比Redolbook14性能强大办公更高效Redolbook14凭强悍性能配置轻薄机身设计优秀的品质做工以及亲民售价,颇受校园学生用户的青睐。3月23日0点开始,Redolbook14迎来限时优惠促销,配备英特尔第11代酷小众眼霜推荐,熊猫眼拜拜喽喜欢小众主义的小姐妹们火速来这边集合!一起来分享一下各自的小众宝藏好物吧!我最近挖掘到一瓶特别特别好用的眼霜,虽然它的品牌在中国市场不算特别小众了,但是这款眼霜诞生的时间还不算很长比亚迪车标焕新发布,全新设计引领新能源发展2021年伊始,比亚迪在公众平台发布了最新设计的标识。据了解,新标识将会运用在国内乘用车上面,集团旗下的其他业务将会继续使用原有的标识。从网上发布的新车标识来看,比亚迪对它进行了扁
诺基亚公布最终裁员谈判结果,280个工作岗位面临裁员计划!全球裁员浪潮的起端时间应该是在2018年,多家互联网公司相继被爆出裁员计划之后,人们发现这一次的裁员浪潮似乎是全球性的,同时裁员的公司有很大一部分都是轻资产运作的互联网公司,这一次深入探讨贝叶斯统计的神秘世界这句话导致了丹尼斯林德利对克伦威尔规则的定义,这提出了如果一个先验概率等于零(我知道某些事情不是真的)或一个(我知道某事是真的)的想法,然后,尽管向你展示了什么证据,你的信念也不会中国研制出世界首列自由编组动车,运载能提高70,还是双层车厢随着时代的发展,高速动车组诞生至今差不多有半个世纪了,由于技术的局限性,普遍采用的还是相对比较固定的编程方式,我国目前采用的是8节或16节的车厢,固定编成编组方式,主要是动力分散型Windows最新补丁导致游戏性能下降及影响鼠标延迟,微软建议卸载微软于近日确认,最新发布的一个Windows更新存在一个问题,导致一些游戏出现不稳定的行为。在推出Windows10版本1809(KB4482887)的二月累积更新之后,一些用户抱最便宜的iOS设备来临!为游戏复出无刘海iOS12,国行继续1999如今的智能手机无论是硬件还是软件都已足够人性化和强大,尤其是手机的硬件性能,除了专业游戏手机比如小米黑鲨Nubia红魔vivoiQOO,绝大部分手机的主要用途都是通讯和社交拍照等,北京允许小巴上路,自动驾驶那种万博发自副驾寺智能车参考公众号AI4Auto国内首个自动驾驶客运巴士落地测试官方监管文件,在北京落地实施。发布单位北京高级别自动驾驶示范区。百度Apollo轻舟智航和商汤3大自动驾券说家居新零售,五位首席分析师聊透了文乐居财经付魁新零售提出来已有五六年的时间,从新兴概念到逐渐普及,家居行业在摸索出一条适合自己的路。新零售进化到哪个阶段,有什么新的态势出现,后疫时代的新机会在哪里?新零售是在零售4月,这几款新车又要来了,个个看点十足,国产车真的崛起了春暖花开,也是新车竞台的巅峰时刻。现在汽车阵营不论合资国产,都要颜值泰山比肩,配置华山论剑,欲与天公试比高。看看下面这几款即将上市的车,科技比拼到一发不可收拾的境地,车是真好了,但微信8。0。21正式版发布,新增这些功能,值得更新通过一段时间的灰度内测,安卓版微信8。0。21正式版终于上线了,新增了不少实用的功能。小雨在升级到最新版本进行一段时间的体验之后,为大家分享一下微信8。0。21forAndroid微信又添三大新功能!网友真香支付宝和微信无一例外的都是免费对外界开放的软件。但是所有的人都认为支付宝和微信赚得盆满钵盈。主要原因是支付宝和微信现在所能够提供的功能实在是太多了。并且涵盖了我们日常出行吃喝玩乐的万物云递交招股书在管面积6。6亿平毛利率创新低包干制收费亏损创新高中华网财经4月1日讯近日,郁亮就万科为何希望经营服务类业务独立上市提问说道孩子长大,胃口变大了,家里不够吃了,所以需要独立去发展。如果还放在万科内部,独立融资的机会都没有。父母应该