美文网首页工作生活
mysql 事务原子性?——让你怀疑人生

mysql 事务原子性?——让你怀疑人生

作者: 阿福德 | 来源:发表于2019-07-03 16:45 被阅读0次

前言

最近做项目中遇到一个情况,从日志中看到事务提交成功了,但出现一个事务中的数据存在部分成功,部分失败的情况。
难道mysql的事务不具有原子性了吗?我都要怀疑人生了。

实验一

事务1

begin trascation;                              --1
update table user set name='a' where id=1;     --1
update table user set name='b' where id=2;     --3
update table user set name='c' where id=3;     --5
commit ;                                       --5

事务2

begin trascation ;                             --2
update table user set desc='bb' where id=2;    --2
update table user set desc='aa' where id=1;    --4
update table user set desc='cc' where id=4;    --6
commit;                                       --6

上面两个事务,执行顺序如上面的序号。

现象

1、事务1提交成功,并且数据都正确。
2、事务2提交成功,但是只有最后一条update成功更新到了数据库中,desc=‘aa’与desc=‘bb’ 都没有更新成功。
3、当执行到4时,或出现死锁错误。
问题:我们可以看到事务2,发现是部分成功,部分失败。

分析

应该是mysql在检测到死锁后将事务2 kill掉了,后这条语句应该是自动提交(autocommit=true),如果死后这样,那我们试一下rollback, 看看将事务2的最后commit改为rollback试试,看看是否正正常rollback。

实验二

事务1

begin trascation;                              --1
update table user set name='a' where id=1;     --1
update table user set name='b' where id=2;     --3
update table user set name='c' where id=3;     --5
commit ;                                       --5

事务2

begin trascation ;                             --2
update table user set desc='bb' where id=2;    --2
update table user set desc='aa' where id=1;    --4
update table user set desc='cc' where id=4;    --6
rollback;                                     --6

上面两个事务,执行顺序如上面的序号。

现象

1、事务1提交成功,并且数据都正确。
2、事务2 rollback成功,没有数据会被更新到数据库中。
3、当执行到4时,或出现死锁错误。

疑问

mysql事务不能保证原子性了吗?
能解释这个问题的大侠,麻烦给我留言,感激不尽。

说明

使用的测试工具为:SQLyog
另外,在mysql服务端测试结果是,事务2不能回滚。(因为事务2的session被kill掉了。所以事务2的最后一句是自动提交的。)

相关文章

  • mysql 事务原子性?——让你怀疑人生

    前言 最近做项目中遇到一个情况,从日志中看到事务提交成功了,但出现一个事务中的数据存在部分成功,部分失败的情况。难...

  • MYSQL 事务特性

    Mysql事务包含ACID四个特性,A: 原子性, C:一致性, I:隔离性, D:持久性 原子性 定义:事务执行...

  • 事务的四大特性

    MYSQL中事务的四大特性(ACID): 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,...

  • MySQL跨行事务模型

    MySQL事务原子性保证 事务原子性要求事务中的一系列操作要么全部完成,要么不做任何操作,不能只做一半。原子性对于...

  • # MySQL-事务介绍

    --- [TOC] --- # MySQL事务 ## ACID 1.**原子性(Atomcity)** 一个事务的...

  • MYSQL锁和事务机制

    mysql基础: mysql的四个特性,原子性、一致性、隔离性、持久性。1.原子性(atomicity):一个事务...

  • mysql的事务特性和锁机制

    MySQL事务的特性分为:原子性,一致性、隔离性、持久性 原子性:一个事务要么执行,要么完全不执行一致性:事务在开...

  • MYSQL 常考(转)

    MySQL 事务四大特性 一说到 MySQL 事务,你肯定能想起来四大特性:原子性、一致性、隔离性、持久性,下面再...

  • mysql 面试整理

    MySQL 事务特点,事务类型? 事务的特点:原子性:要么执行成功要么执行失败。实现主要是以undo log隔离性...

  • 分布式事务概论

    by shihang.mai 分布式事务 传统事务 传统事务(典型:mysql)有以下特性: 原子性A(Atomi...

网友评论

    本文标题:mysql 事务原子性?——让你怀疑人生

    本文链接:https://www.haomeiwen.com/subject/yhlchctx.html