php - 在 php 中测试并发 mysql 插入操作

标签 php mysql concurrency cron

我想同时多次运行这个 php 脚本。

$db =  new mysqli('localhost', 'me', 'pw', 'test');   
$time = time();
$sql = "  INSERT INTO test  (  `test_created`  ) VALUES( ". $time  .") ";
$result = $db->query($sql);

我这样做是因为我想复制一个场景,在这个场景中,许多用户在完全相同的时间(最多纳秒)提交数据库条目,这就是我所说的“并发”插入。

我尝试通过指定执行时间和分钟来使用我的共享托管服务提供商的虚拟 cron 调度程序。然后我制作了五个包含上述代码的相同文件。

但是,当我查看表条目时,插入的时间戳并不相同。这是因为 mysql 无法处理并发插入操作吗?如果 mysql 可以处理“并发插入”,这是测试并发插入操作的正确方法吗?如果没有,我应该如何在有或没有 cron 的 php 环境中进行测试?

最佳答案

  1. 尝试模拟在同一 纳秒 内发生的操作通常很困难且不切实际,我只想笼统地说这在 PHP 或 mySQL 中根本不可能 < em>分开,更不用说串联了。

  2. 您不能同时向表格中插入两行。永远不会。您可以在一个 RDBMS 中有两个线程如此快速和无缝地插入行,以至于出于所有意图和目的,您可以声称它是同时发生的,但是要使 RDBMS 保持一致性,必须有一个单一的、连续的没有分支的操作​​顺序。

  3. 甚至不必担心您尝试模拟的情况。我必须认真研究才能找到无法优雅地处理这种情况的 RDBMS。

关于php - 在 php 中测试并发 mysql 插入操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34168702/

相关文章:

c# - XElement 的添加操作是线程安全的吗?

php - mongodb.so 和 mongo.so 的区别

php - Laravel Eloquent 查询 JSON 列,其中包含Where In?

php - CakePHP - 列出按program_id分组的条目

c - 设备驱动程序中哪些类型的数据可以在进程之间共享?

java - 并发 - 为什么对最终静态字段使用嵌套子类?

php - 获取数据,处理付款,然后再获取

PHP if/else 语句

php - 自动更改空格和下划线

php - 将特殊字符隐藏为 html 数字/名称,然后再次隐藏为 php 中的特殊字符