首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL MVCC (InnoDB)

MySQL MVCC (InnoDB)
EN

Stack Overflow用户
提问于 2016-06-11 14:08:24
回答 1查看 462关注 0票数 0

问题是MySQL InnoDB表中同时选择和更新的行为:

我们有一个相对较大的表,我们定期扫描读取几个字段,包括一个名为LastUpdate的字段。在扫描期间,我们更新先前扫描过的行。更新是在后台线程中批处理和执行的--使用不同的连接。需要注意的是,我们更新了已经读取的行。

三个问题:

  1. 由于选择仍在进行中,InnoDB会保存更新行的早期版本吗?
  2. 是否会使用读未提交的选择帮助?
  3. 如何确认InnoDB是否在其重做日志中保存或不保存先前版本的修改行。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-25 22:53:31

忽略这个问题,编写不会遇到麻烦的代码:

代码语言:javascript
复制
BEGIN;
SELECT id ... LIMIT 20; -- get list of _possible_ candidates for action
COMMIT;
**
foreach $candidate
    BEGIN;
    SELECT ..., is_candidate WHERE id = $candidate FOR UPDATE;
    if still a candidate
        process it
        UPDATE ...;
    COMMIT;

如果有人溜进来,比如说,在**,稍后的检查将防止双重处理.此外,第二个BEGIN..COMMIT防止任何人溜进来。

FOR UPDATE“锁定”行;这很重要。

这种处理方式的优点是事务处理速度快,从而将对其他一切的影响降到最低。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37764677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档