V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
npc0der
V2EX  ›  MySQL

两个事务先后进行数据更新 出现查询出的数据是在事务发生之前?

  •  
  •   npc0der · 2015-02-03 17:07:30 +08:00 · 5572 次点击
    这是一个创建于 3592 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事务A 事务B 对 某一账户进行更新

    具体逻辑就是
    先执行事务 A
    开启事务
    获取账户余额 查询得到 x
    更新账户余额为 x + 1
    事务提交

    再执行事务B

    事务B 里面 也是按照这个逻辑来 但是 获取账户余额查询得到的是 x 而不是 x + 1

    7 条回复    2015-02-04 12:57:57 +08:00
    lilydjwg
        1
    lilydjwg  
       2015-02-03 17:20:47 +08:00
    lilydjwg
        2
    lilydjwg  
       2015-02-03 17:21:48 +08:00   ❤️ 1
    对了,你的事务 B 应该是在事务 A 提交前开启的吧?不然就真说不过去了。
    summic
        3
    summic  
       2015-02-03 17:24:21 +08:00   ❤️ 1
    仔细看看4个事务隔离解别,看哪个适合你的业务场景
    dingyaguang117
        4
    dingyaguang117  
       2015-02-03 18:13:20 +08:00
    这种应该加锁, select for update
    npc0der
        5
    npc0der  
    OP
       2015-02-04 09:38:50 +08:00
    @lilydjwg 我是在循环里面 做的 事务 A B C 这样的 理论上 B 应该是在 A commit 之后进行的

    PHP 所以我很不解。

    SELECT @@GLOBAL.tx_isolation, @@tx_isolation; 都是

    REPEATABLE-READ
    yanze0613
        6
    yanze0613  
       2015-02-04 11:12:21 +08:00
    和数据库隔离级别有关系
    npc0der
        7
    npc0der  
    OP
       2015-02-04 12:57:57 +08:00
    具体原因知道了 可能是因为重复提交导致的 并发了 如果只提交一次 逻辑上是不会有这个事情出现的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:06 · PVG 04:06 · LAX 12:06 · JFK 15:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.