MySQL-事务

ACID 测试

ACID 表示原子性、一致性、隔离性和持久性。一个运行良好的事务处理系统,必须具备这些标准概念。

原子性

一个事务必须被视为一个不可分割的最小工作单元。

一致性

一个事务中所有语句,要么成功,要么失败。

隔离性

一个事务所做的修改,在最终提交以前,对其他事务是不可见的。

隔离级别

隔离性其实比想象的更复杂。

  1. READ UNCOMMITTED(未提交读)

    在这个级别中,事务中的修改,即使没有提交,对其他事务也都是可见的。

    这种读被称为"脏读"。在实际应用中一般很少使用。

  2. READ COMMITTER(提交读)

    大多数数据库系统的默认隔离级别都是 READ COMMITTER(但 MYSQL不是)。

    即,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。

    这个级别有时候也叫做不可重复读(nonrepeatable read),因为两次执行同样的查询,可能会得到不一样的结果。

  3. REPEATABLE READ(可重复读)

    这个级别解决了脏读的问题。该级别保证了同一个事务中多次读取同样的记录的结果是一致的。

    理论上,可重复读隔离级别还是无法解决另外一个幻读(Phantom Read)的问题。

    所谓幻读,指的是某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row)。

    image
  4. SERIALIZABLE(可串行化)

    这是最高的隔离级别。

    避免了幻读的问题。

    会在读取的每一行数据上加锁,所以可能导致大量的超时和锁争用的问题。

    实际应用中也很少用到这个级别。只有在非常需要确保数据的一致性而且可以接受没有并发的情况下,才考虑使用这一级别。

隔离级别 脏读可能性 不可重复读可能性 幻读可能性 加锁读
READ UNCOMMITTER YES YES YES NO
READ COMMITTER NO YES YES NO
REPEATABLE READ NO NO YES NO
SERIALIZABLE NO NO NO YES

持久性

一旦事务提交,则其所做的修改就会永久保存到数据库中。

死锁问题

死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。

image

为了解决死锁导致非常慢的查询,数据库系统实现了各种死锁检测和死锁超时的机制。

锁的行为和顺序是和存储引擎相关的,以同样的顺序执行语句,有些引擎会产生死锁,有些则不会。

死锁产生有双重原因:

  • 有些是因为真正的数据冲突,这种情况很难避免
  • 但有些则完全是由于存储引擎的实现方式导致的

死锁产生后,只有部分或者完全回滚其中的一个事务,才能打破死锁。

事务日志

事务日志可以帮助提供事务的效率。

使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把该修改行为记录到持久的硬盘上的事务日志中,而不用每次都将修改的数据持久到硬盘。

所以,修改数据需要写两次磁盘。

MySQL 中的事务

MySQL 提供了两种事务型的存储引擎:InnoDB 和 NDB Cluster。另外还有一些第三方存储引擎,比如 XtraDB 和 PBXT。

MYSQL 采用自动提交的模式。也就是说如果不显式地开启一个事务,则每个查询都被当做一个事务执行提交操作。

可以执行如下命令设置隔离级别:

SET TRANSACTION ISOLATION LEVEL [隔离级别]

在同一事务中,使用多种存储引擎是不可靠的。

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

推荐阅读更多精彩内容