mysql的FOR UPDATE / LOCK IN SHARE MODE还能锁定未来的行吗?

时间:2014-06-30 22:55:49

标签: php mysql sql locking innodb

所以,让我们说我有一个专栏建立在其他表的内容之上。例如,属于课程students的{​​{1}}列表,我想以任何理由缓存/预取到3表中:

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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