根据 CSV 每 x 分钟用 PHP 更新整个 table

Update a whole table with PHP every x minutes according to a CSV

我必须在 MySQL 数据库中每 10 分钟用 PHP 更新一个大的 table(产品)。我必须 运行 PHP 带有 cron 作业的脚本,并且我从 CSV 文件中获取最新的产品。 table 目前有 ~18000 行,不幸的是我无法判断它在 10 分钟内会发生多少变化。最重要的当然是我不想让用户注意到后台的更新。

这些是我的想法和恐惧:

所以基本上我想知道哪种方法最安全,可以在用户不注意的情况下完全更新 table。

假设 InnoDB 和默认隔离级别,您可以启动一个事务,删除所有行,插入新行,然后提交。在提交完成之前,用户将看到之前的状态。

当事务打开时(删除之后),更新将被阻止,但 SELECT 不会。由于它对用户来说是只读 table,因此不会有问题。当交易开放时,他们仍然可以 SELECT

您可以通过阅读有关 MVCC 了解详细信息。它的要点是任何时候有人执行SELECT,MySQL使用数据库中的数据加上回滚段来获取以前的状态,直到事务被提交或回滚。

来自MySQL docs

InnoDB uses the information in the rollback segment to perform the undo operations needed in a transaction rollback. It also uses the information to build earlier versions of a row for a consistent read.

只有提交完成后,用户才会看到新数据而不是旧数据,并且在当前事务结束之前,他们不会看到新数据。