关于你引用的那篇文章。这只是意味着,你不应该这样做:
mysqli_query($link, $query);
mysqli_use_result($link);
// lots of 'client processing'
// table is blocked for updates during this
sleep(10)
mysqli_fetch_* .....
在这种情况下,建议您这样做:
mysqli_query($link, $query);
mysqli_store_result($link);
// lots of 'client processing'
// table is NOT blocked for updates during this
sleep(10)
mysqli_fetch_* .....
该文章进一步说,如果将发出第二个查询 - 在调用 mysql_use_result() 之后并且在从查询中获取结果之前它将失败。这意味着每个连接 - 每个脚本。所以在此期间其他用户的查询不会失败。
当 php 脚本检索结果时,其他用户将无法获得结果,对吗?
不,这是不对的。MySQL 支持与您在my.ini
max_connections
. 并发读取由 mysql 服务器处理。除非达到最大连接限制并且 mysqli_connect() 会失败,否则客户端代码不必担心这一点。如果您的应用程序达到了经常发生这种情况的程度,那么在大多数情况下,您首先会尝试调整您的 mysql 配置,以便 mysql 允许更多的并行连接。如果达到阈值,您将使用复制或 mysql 集群等尝试。
同样使用上述相同的情况,当 user1 完全收到它的结果时,会发送一个 'UPDATE set view_count = INC(1)' 查询并且我想该表已被锁定,并且对于其他用户,这个相同的查询会失败吗?
当有并发读写时,这当然是一个性能问题。但是 MySQL 服务器会为您处理这个,这意味着只要连接到 mysql 工作,客户端代码就不用担心它。如果您的负载非常高,您将主要使用主从复制或 MySQL 集群。