mysqli_use_result()和并发

时间:2009-02-26 18:57:12

标签: php mysql mysqli innodb myisam

根据mysqli_use_result

的文件
  

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

这只适用于myISAM表还是InnoDB?

1 个答案:

答案 0 :(得分:1)

刚刚检查过: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