mysqli_use_result() 和并发性

发布于 2024-07-14 18:37:10 字数 253 浏览 9 评论 0原文

根据 mysqli_use_result 的文档

如果在客户端执行大量处理,则不应使用 mysqli_use_result(),因为这会占用服务器并阻止其他线程更新从中获取数据的任何表。

这仅适用于 myISAM 表还是也适用于 InnoDB?

According to the documentation at mysqli_use_result

One should not use mysqli_use_result() if a lot of processing on the client side is performed, since this will tie up the server and prevent other threads from updating any tables from which the data is being fetched.

Does this only pertain to myISAM tables or also for InnoDB?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哆兒滾 2024-07-21 18:37:10

刚刚检查:MyISAM 锁定,InnoDB 不锁定:

<?php
        $db = new mysqli() or die ("Cannot connect: " . mysqli_connect_error() . "\n");
        $query = "SELECT * FROM mytable";
        $db->real_query($query) or die ("Cannot fetch: $db->error\n");
        $result = $db->use_result() or die ("Cannot use result: $db->error\n");
        while($row = $result->fetch_row()) {
                print join("\t", $row) . "\n";
                usleep(1000000);
        }
?>

此锁定:

UPDATE mytable /* isam */ SET myvalue = 'test' WHERE id = 100

此不锁定:

UPDATE mytable /* innodb */ SET myvalue = 'test' WHERE id = 100

Just checked: MyISAM locks, InnoDB doesn't lock:

<?php
        $db = new mysqli() or die ("Cannot connect: " . mysqli_connect_error() . "\n");
        $query = "SELECT * FROM mytable";
        $db->real_query($query) or die ("Cannot fetch: $db->error\n");
        $result = $db->use_result() or die ("Cannot use result: $db->error\n");
        while($row = $result->fetch_row()) {
                print join("\t", $row) . "\n";
                usleep(1000000);
        }
?>

This locks:

UPDATE mytable /* isam */ SET myvalue = 'test' WHERE id = 100

This doesn't:

UPDATE mytable /* innodb */ SET myvalue = 'test' WHERE id = 100
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文