Mysql事务隔离级别
1、事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性
原子性(Atomicity) :事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。
一致性(Consistent) :在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规 则都必须应用于事务的修改,以保持数据的完整性。
隔离性(Isolation) :数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的"独 立"环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。
持久性(Durable) :事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。
2、事务隔离级别:
常看当前数据库的事务隔离级别: show variables like "tx_isolation";
设置事务隔离级别:set tx_isolation="REPEATABLE-READ";
Mysql默认的事务隔离级别是可重复读,用Spring开发程序时,如果不设置隔离级别默认用Mysql设置的隔 离级别,如果Spring设置了就用已经设置的隔离级别。
3、行锁与事务隔离级别案例分析
CREATE TABLE `account` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`balance` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test`.`account` (`name`, `balance`) VALUES ("lilei", "450");
INSERT INTO `test`.`account` (`name`, `balance`) VALUES ("hanmei", "16000");
INSERT INTO `test`.`account` (`name`, `balance`) VALUES ("lucy", "2400");
读未提交:
(1)打开一个客户端A,并设置当前事务模式为read uncommitted(未提交读),查询表account的初始值: set tx_isolation="read-uncommitted"
(2)在客户端A的事务提交之前,打开另一个客户端B,更新表account:
(3)这时,虽然客户端B的事务还没提交,但是客户端A就可以查询到B已经更新的数据
(4)一旦客户端B的事务因为某种原因回滚,所有的操作都将会被撤销,那客户端A查询到的数据其实就是脏数据:
(5)在客户端A执行更新语句update account set balance = balance - 50 where id =1,lilei的balance没有变成350,居然是400,是不是很奇怪,数据不一致啊,如果你这么想就太天真 了,在应用程序中,我们会用400-50=350,并不知道其他会话回滚了,要想解决这个问题可以采用读已提交的隔离级别
读已提交
(1)打开一个客户端A,并设置当前事务模式为read committed(未提交读),查询表account的所有记 录: set tx_isolation="read-committed";
(2)在客户端A的事务提交之前,打开另一个客户端B,更新表account:
(3)这时,客户端B的事务还没提交,客户端A不能查询到B已经更新的数据,解决了脏读问题
(4)客户端B的事务提交
(5)客户端A执行与上一步相同的查询,结果与上一步不一致,即产生了不可重复读的问题
可重复读
(1)打开一个客户端A,并设置当前事务模式为repeatable read,查询表account的所有记录 set tx_isolation="repeatable-read";
(2)在客户端A的事务提交之前,打开另一个客户端B,更新表account并提交
(3)在客户端A查询表account的所有记录,与步骤(1)查询结果一致,没有出现不可重复读的问题
(4)在客户端A,接着执行update account set balance = balance - 50 where id = 1,
balance没有变成 400-50=350,lilei的balance值用的是步骤2中的350来算的,所以是300,数据的一致性倒是没有被破坏。可 重复读的隔离级别下使用了MVCC(multi-version concurrency control)机制,select操作不会更新版本号, 是快照读(历史版本);insert、update和delete会更新版本号,是当前读(当前版本)
(5)重新打开客户端B,插入一条新数据后提交
(6)在客户端A查询表account的所有记录,没有查出新增数据,所以没有出现幻读
(7)验证幻读 在客户端A执行update account set balance=888 where id = 4;能更新成功,再次查询能查到客户端B新增的数据
查看INFORMATION_SCHEMA系统库锁相关数据表
查看事务:select * from INFORMATION_SCHEMA.INNODB_TRX;
查看锁:select * from INFORMATION_SCHEMA.INNODB_LOCKS;
查看锁等待:select * from INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
查看锁等待详细信息:show engine innodb statusG;
每天进步一点点。
五万以内摩旅神器骑摩托车去旅行是多么美的一件事,但是呢如何去选择一款适合自己的车这就是个问题,给大家推荐三款摩旅神器。第一款五羊本田CB400X(4。25W4。85W)此车为什么推荐首先本田的品质
湖南省气象台发布高温黄色预警III级较重湖南省气象台2022年9月8日15时40分发布高温黄色预警预计8日20时至9日20时,长沙(雨花区高新区长沙县望城区天心区芙蓉区开福区岳麓区浏阳市宁乡市)株洲大部分地区(醴陵市天元
苹果精准刀法切割!iPhone14系列发布,会跳动的刘海屏一年一度的科技界春晚在今天凌晨1点准时召开了,这次的发布会的产品也是相当丰富的。除了万众瞩目的iPhone14系列,还发布了三款AppleWatch产品和AirPodsPro2产品
萝北高速高质发展答卷亮眼提气来源黑龙江日报太平沟五花山。大卫广场。张力摄五矿石墨调度指挥中心。小学校开展爱国主义教育活动。萝北口岸。萝北县中医院义诊活动。萝北县城区。过去的十年,萝北走过了极不平凡的奋斗历程。
华为新机发布在即,你会期待吗?华为新机发布在即华为官宣9月6日发布!相比40,新增了哪些优势?1根据供应链消息华为已开始批量生产,整部手机采用曲面屏,其中的核心部件和技术的定位相应提高。并有望在新产品发布会上推
锂行业分析报告锂盐供应端利润高增之后,可持续性与矿冶分化(报告出品方作者东证期货,陈祎萱)1引言随着各企业半年度业绩陆续披露,不难看出,当前锂电全产业链中,上游供应端充分受益于锂盐价格高增享有了最为丰厚的利润。那么站在当下,市场更为关注
2022年办理退休,视同缴费年限如何认定,哪些人有视同缴费年限?视频加载中我国的养老保险制度各地开始的时间各不相同,最早1992年开始有养老保险个人账户,最晚可以到1998年。由于各地实施的时间不一样,导致视同缴费年限转移时产生了混乱,直到16
疾驰汾酒陷入同室操戈,短期产能或陷困局山西汾酒迎来其史上最好半年报,然而,萧墙之内或许上演同室操戈,中汾酒业或成达尔摩斯之剑,让山西汾酒陷入短期产能短缺困局。作者老高(酒业资深从业者)2015年创办酒特卖至今,2006
为啥理想ONE急于停产?了解下蔚小理最近的窘境,你会明白的蔚小理水逆的8月10677辆,同比增长81。69578辆,同比增长32。74571辆,同比下滑51。5。以上,分别是蔚小理三家在8月交出的成绩单,老实说,暗含不少唏嘘。过去一年,除
在救援现场,太想让他们都活着泸定地震救援实录阿坝,汶川。四个字的标牌,异常醒目,被缝在橘黄色衣服的袖子上。穿着这身消防员衣服的救灾男孩张自立,正双手托抱着一个小婴儿。不熟练的姿势以及眼神里投射出的紧张,所有人都能看得出,他太
王者1号更新,1传说1史诗返场,荣耀水晶双重打折,裴擒虎笑了大家好,这里峡谷热点报,将会给你带来王者荣耀最新的爆料内容。王者荣耀每周更新来了,这一次并没有新皮肤,不过官方给我们准备了一款限定史诗返场,和一个传说特效返场。目前来看,基本上可以