【轻知识】mysql事务隔离笔记与练习

事务隔离级别

  • 读未提交(read uncommitted)
    读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。
  • 读提交(read committed)
    读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。
  • 可重复读(repeatable read)
    可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据
    是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的
  • 串行化(serializable)
    串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当
    出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

事务隔离级别练习

启动两个窗口

准备语句

create database mysql45;
use mysql45;

查看当前的事务隔离级别

mysql> show variables like 'tx_isolation'; # (我电脑是phpstudy自带的mysql版本是5.5。5.7引入了transaction_isolation,所以用show variables like 'transaction_isolation'; )或select @@tx_isolation;
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+

既然是 REPEATABLE-READ所以我先练习的是可重复读。

A表示左边窗口。B表示右边窗口。

读未提交

设置隔离级别的方式set tx_isolation = 'read-uncommitted';

B还没有commit事务的时候,A事务就能查出刚insert 的数据,也能查出update之后的数据。

当B commit之后,当然A查询的结果不变。

image.png

读提交

set tx_isolation = 'read-committed';

B未commit即便插入了数据或者更新元数据;A事务查询的结果是一致的。

B commit 之后;A事务查询到了B commit后的结果。

image.png

可重复读

set tx_isolation = 'repeatable-read';

B不commit即便插入了数据或者更新元数据;A事务查询的结果是一致的。(这点跟读提交是相同的)

B commit,A事务查询仍然是一致的。

image.png

串行化

set tx_isolation = 'serializable';

A 先操作语句,B会阻塞住。会用到锁。

image.png

或者B先操作语句会阻塞住A。

image.png

A commit之后,B不在阻塞就查到了提交的数据了。

image.png

begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作InnoDB 表的语句(第一个快照读语句),事务才真正启动。如果你想要马上启动一个事务,可以使用 start transaction with consistent snapshot 这个命令。
“start transaction with consistent snapshot; ”的意思是从这个语句开始,创建一个持续整个事务的一致性快照。所以,在读提交隔离级别下,这个用法就没意义了,等效于普通的 start transaction。

事务的启动方式

不同时刻启动的事务有不同的read-view,对同一条记录操作,会产生多个版本(回滚段),就是数据库的多版本并发控制(MVCC)。

select @@autocommit; # 或show variables like 'autocommit'; 我的默认为开启

  1. 显式启动事务语句, begin 或 start transaction。配套的提交语句是 commit,回滚语
    句是 rollback。
  2. set autocommit=0,这个命令会将这个线程的自动提交关掉。意味着如果你只执行一个 select 语句,这个事务就启动了,而且并不会自动提交。这个事务持续存在直到你主动执行 commit 或 rollback 语句,或者断开连接。

建议 autocommit 为1。通过显式语句启动事务。

长事务

长事务意味着系统里面会存在很老的事务视图。由于这些事务随时可能访问数据库里面的
任何数据,所以这个事务提交之前,数据库里面它可能用到的回滚记录都必须保留,这就
会导致大量占用存储空间。

除了对回滚段的影响,长事务还占用锁资源,可能拖垮整个库。

制造一个长事务。B窗口begin 执行一条语句。在A中查。

你可以在 information_schema 库的 innodb_trx 这个表中查询长事务。

select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60; // 大于60s。
image.png

我问了下DBA,他们监控的长事务就是这张表。

有次有一个小伙伴查数据,没提交就放着。

image.png

参考资料:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容

  • 一、事务 1、事务四要素:ACID 对于事务,我之前的理解是很粗糙的,不就是为了保证操作的原子性么?一般订单系统或...
    张伟科阅读 1,308评论 0 5
  • MySQL 事务的四种隔离级别 1 事务的基本要素(ACID) 原子性(Atomicity):事务开始后所有操作,...
    4a873e424089阅读 648评论 0 0
  • 准备工作了解 mysql -uroot -p123456use test;;系统级隔离级别,如果只是实验系统的可以...
    zhyke阅读 365评论 0 1
  • 真的忘了,放心里
    ooo那个还是miy阅读 60评论 0 0
  • 世界上没有什么是永恒的,被人创造的总会存在的比人久,有人可能会讥笑,但是小光就是这么认为的。 “不怕死不怕老这是...
    张静轩阅读 331评论 2 0