Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql在共享模式下的更新/锁定是否也会锁定将来的行?_Php_Mysql_Sql_Locking_Innodb - Fatal编程技术网

Php mysql在共享模式下的更新/锁定是否也会锁定将来的行?

Php mysql在共享模式下的更新/锁定是否也会锁定将来的行?,php,mysql,sql,locking,innodb,Php,Mysql,Sql,Locking,Innodb,所以,假设我有一个单列,它构建在另一个表的内容之上。例如,我希望出于任何原因将属于课程3的学生列表缓存/预取到课程表中: 现在,如果一个并发会话在执行时创建了一个新的学生,该怎么办? 从courseID=3的学生中选择名称是否在共享模式下锁定了courseID=3的未来行 谢谢 不,没有。如果第二条SQL语句取决于第一条SQL语句的结果,则必须使用事务 另一方面,它是一个缓存。它应该至少在一天中的某个时间包含过时的数据。我已经在使用事务,应该使用哪种隔离级别?我认为事务在这种情况下不会有帮助。事

所以,假设我有一个单列,它构建在另一个表的内容之上。例如,我希望出于任何原因将属于课程3的学生列表缓存/预取到课程表中:

现在,如果一个并发会话在执行时创建了一个新的学生,该怎么办? 从courseID=3的学生中选择名称是否在共享模式下锁定了courseID=3的未来行


谢谢

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


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

我已经在使用事务,应该使用哪种隔离级别?我认为事务在这种情况下不会有帮助。事务封装了一系列来自并行查询所做更改的查询。
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");