因此,假设我有一个基于其他表的内容的列。例如,属于课程students3列表,无论出于何种原因,我都希望将其缓存/预取到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的“未来行”?

谢谢!

最佳答案

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

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

关于php - 的MySQL的更新/共享模式锁定也锁定 future 的行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24500133/

10-16 18:49