【问题标题】:do mysql's FOR UPDATE / LOCK IN SHARE MODE also lock future rows?mysql 的 FOR UPDATE / LOCK IN SHARE MODE 是否也会锁定未来的行?
【发布时间】:2014-06-30 22:55:48
【问题描述】:

所以,假设我有一个基于另一个表的内容构建的列。例如,属于课程3students 列表,无论出于何种原因,我都想将其缓存/预取到courses 表中:

students:
ID| name  | courseID
1 | Jerry | 3
2 | Tom   | 3
3 | Mike  | 4
4 | Mary  | 3

courses:
ID| name         | studentsCache
1 | HTML Course  | Jerry, Tom, Mary


$students_rs = $db->get("SELECT name FROM students WHERE courseID = 3");
$studentsList = implode(", ", $students_rs);
$db->exec("UPDATE courses SET studentsCache = $studentsList WHERE courseID = 3");

现在,如果并发会话在执行时创建了一个新学生怎么办? SELECT name FROM students WHERE courseID = 3 LOCK IN SHARE MODE 是否也会锁定具有 courseID = 3 的“未来行”?

谢谢!

【问题讨论】:

    标签: php mysql sql locking innodb


    【解决方案1】:

    不,它没有。如果第二条 SQL 语句依赖于第一条的结果,则必须使用事务。

    另一方面:它是一个缓存。它应该至少在一天中的某个时间包含过时的数据。

    【讨论】:

    • 我已经在使用事务(我应该使用哪个隔离级别?),我认为事务在这种情况下无济于事
    • 事务封装了一系列来自并行查询所做更改的查询。
    猜你喜欢
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    相关资源
    最近更新 更多