使用PHP mysqli_query进行单个SELECT查询的隔离级别

时间:2014-08-03 22:53:56

标签: php mysql mysqli transactions isolation-level

我有一个InnoDB数据库,其中包含一个表 book 。另外,我有一个包含一个查询的PHP脚本,用于显示此类 book 表中的书籍数量:

SELECT COUNT(*) FROM book

如您所知,使用 mysqli 扩展名,可以使用 mysqli_begin_transaction 创建一个事务。接下来,可以定义隔离级别。

在我的情况下,我不需要与事务相关的函数,我使用 mysqli_query ,因为它只是一个SELECT查询。但是,我知道即使单个查询也包含在MySQL的事务中,默认的隔离级别是REPEATABLE READ。

问题出在这里:我不想让REPEATABLE READ开销只执行这样的单一查询。 READ UNCOMMITTED已经足够了。

问题:是mysqli_extension自动检测,我使用单个SELECT查询(因为我不开始任何事务)并自动将隔离级别设置为READ UNCOMMITTED(或最多READ COMMITED)或者我是否需要定义一个wrap类来在执行这样的transaction-with-only-SELECT-query之前始终设置READ UNCOMMITTED隔离级别?

非常感谢。

1 个答案:

答案 0 :(得分:1)

不,mysqli_query不会自动更改隔离级别。通过mysqli连接在很多方面就像通过mysql cli连接一样。在这两种情况下,您都将获得默认的隔离级别。就像cli一样,mysqli无法对通过连接传递什么语句做出任何假设。

无论如何,如果你有充分的理由担心隔离级别,我认为你应该明确地设置它,例如:

$mysqli_connection->query("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");

这样您可以确保拥有所需的隔离级别,并且可以在代码中评论您的原因。