代码之家  ›  专栏  ›  技术社区  ›  NicolasCanac

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

  •  1
  • NicolasCanac  · 技术社区  · 10 年前

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

    SELECT COUNT(*) FROM book
    

    正如你所知 mysqli数据库 扩展,可以使用 mysqli_begin_transaction 接下来,可以定义隔离级别。

    在我的情况下,我不需要与事务相关的功能,我使用 mysqli_query ,因为它只是一个SELECT查询。然而,我知道,即使是一个查询也被包装在MySQL事务下,默认的隔离级别是REPEATABLE READ。

    问题就在这里:我不希望只执行这样一个查询就产生REPEATABLE READ开销。阅读未经授权即可。

    问题:mysqli_extension是否自动检测到我正在使用一个SELECT查询(因为我没有开始任何事务)并自动将隔离级别设置为READ UNCOMMITTED(或最多为READ COMMITED),或者我是否需要定义一个包装类,以便在仅使用一个SELECT查询执行此类事务之前始终设置READ UNCCOMMITED隔离级别?

    非常感谢你。

    1 回复  |  直到 10 年前
        1
  •  1
  •   skarist    10 年前

    不,mysqli_query不会自动更改隔离级别。通过mysqli连接在很多方面都与通过mysqlcli连接类似。在这两种情况下,您都将获得默认的隔离级别。就像cli一样,mysqli也不能对连接中的语句做出任何假设。

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

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

    这样,您就可以确保您具有所需的隔离级别,并且可以在代码中注释您的原因。