那么,假设我有一个建立在另一个表内容之上的列。例如,属于课程3
的students
列表,我想将其缓存/预取到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语句依赖于第一个SQL语句的结果,则必须使用事务。
另一方面,是一个缓存。它应该包含一天中至少某个时间的过时数据。