【问题标题】:Will a php script wait if it wants to read from a locked table?如果要从锁定的表中读取,php 脚本会等待吗?
【发布时间】:2013-06-01 07:52:10
【问题描述】:

我有一个 cli php 脚本,每当电子邮件到达特定地址时就会执行该脚本。

当一封新电子邮件到达时,会执行一个新的脚本实例,但由于它们读/写相同的数据库表,有时会写入错误的数据。

我的问题是,如果第一个脚本在它需要的所有表上加了锁,并且脚本的第二个/第三个 etc 实例运行,他们会等待表被第一个执行的脚本解锁吗?如果可以,持续多长时间?

最后我要做的是让脚本以串行方式一个接一个地进行读/写,以避免重复和错误。

【问题讨论】:

  • 你需要提供具体的例子,你的数据库是如何实现的,数据库上到底写了什么以及如何。还“写入错误的数据”请定义。

标签: php mysql concurrency


【解决方案1】:

是的,它会等待。这是由数据库服务器完成的,客户端应用程序完全不知道它正在发生——据它所知,数据库执行查询的速度很慢。

【讨论】:

    【解决方案2】:

    PHP 脚本使用 mysql 库(mysql、mysqli、pdo)作为任何 mysql 客户端连接到 mysql 服务器并让它执行查询。 mysql 服务器可以占用它想要的所有时间。

    但是可以将 PHP 设置为限制总脚本执行时间(包括任何 mysql 查询)。如果超过此限制,PHP 将终止正在运行的进程。默认情况下,最大执行时间是 30 秒,如果我没记错的话,对于 cli 甚至是 300 秒。您可以在 php.ini 中进行设置。您甚至可以将 CLI 最大执行时间设置为无限制。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多