所以,让我们说我有一个专栏建立在其他表的内容之上。例如,属于课程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
?
谢谢!
答案 0 :(得分:0)
不,它没有。如果第二个SQL语句取决于第一个SQL语句的结果,则必须使用事务。
另一方面:它是一个缓存。它应该至少在一天的某个时间包含过时的数据。