如果想要从锁定的表中读取,php脚本会等待吗?

时间:2013-06-01 07:52:10

标签: php mysql concurrency

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

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

我的问题是,如果第一个脚本锁定了它需要的所有表,并且运行了脚本的第二个/第三个等实例,它们是否会等待第一个执行脚本解锁表?如果是这样多久?

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

PHP脚本使用mysql库(mysql,mysqli,pdo),因为任何mysql客户端连接到mysql服务器并让它执行查询。 mysql服务器可以随时使用它。

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