如何在引发超时 504 的 php 循环中更新多行

我正在尝试将客户迁移到新的数据库结构。


我编写了一个 PHP 脚本,它遍历每条记录并确定该客户在数据库中是否有重复项。如果出现多次,我会更新链接到该客户的所有其他表,并将其链接的 customerID 更新为该客户的最新版本。


我面临的问题是,通过在浏览器中加载 migrate.php 来运行此脚本需要很长时间,以至于在运行它时会出现超时 504,即使我运行以“A”开头的客户名称的查询。然后更改为“B”并运行脚本,然后更改为“C”并运行脚本等...(无论如何都需要永远完成)。


所以我的问题是:如何在 migrate.php 页面的 PHP 循环中运行大约 120,000 个 UPDATE 查询并避免 504 超时(当前设置为 5 分钟的限制),或者通过打印查询并通过 PHPMyAdmin 运行它们?


我已经打印出来(片段):


BEGIN;

UPDATE renewal_reminder SET renewalid='49884' WHERE renewalid='43239';

UPDATE renewal_note SET renewalid='49884' WHERE renewalid='43239';

UPDATE renewal_request SET renewalid='49884' WHERE renewalid='43239';

UPDATE renewal_timeline SET renewalid='49884' WHERE renewalid='43239';

COMMIT;

但这仍然会杀死 PHPMyAdmin 并返回错误。


可以在 PHPMyAdmin 中使用这个大的更新列表来运行脚本,也许是分批?


慕的地6264312
浏览 107回答 1
1回答

隔江千里

更新出色地...我最终在引用它的每个表中为 customerID 建立了索引,并使用 UPDATE 查询运行了我的原始脚本,它在大约 5 秒内完成了......无需插入,然后复制数据。因此,对于遇到相同问题的任何人,请尝试索引表中的某些列,以便您的脚本可以快速引用它们。
打开App,查看更多内容
随时随地看视频慕课网APP