使用cron作业更新mysql表的最佳方法是什么?

时间:2018-08-18 18:55:41

标签: php mysql csv cron

我每天早上5:19收到CSV。 CSV中的信息用于填充/更新我的sql数据库中的表。

我有3张桌子:

tempVehicle (temporary table, just for holding info), 

vehicle (contains most info, main table), 

and vehicleImages (table linked to vehicle by VIN). 

我需要从表中删除新CSV中未包含的信息,并将新信息从CSV中获取到表中。

我将其设置为:

  1. 放下tempVehicle,以完全擦拭桌子
  2. 为新表重新创建tempVehicle
  3. 将CSV数据导入tempVehicle,用作临时信息持有人
  4. 从vehicleImages表中删除所有数据,所以我可以从主表(车辆)中删除项目
  5. 从车辆表中删除所有数据
  6. 从tempVehicle插入到车辆桌子
  7. 通过展开CSV中的图像链接来更新vehicleImages,然后将“ insert ignore”插入到vehicleImages中

我总共有7个PHP文件,每个文件都与上述步骤之一相关联。我这样做是因为它们必须按照特定的顺序发生,而且我不知道如何在保持特定顺序的同时使多重查询正常工作。

在理想情况下,我希望使用一个php文件中的单个多查询来进行设置。我计划每天使用cron作业来运行此文件,而不希望不必运行多个cron作业。

因此,我想回答的问题是:

  • 是否有更好的方法来更有效地更新表?

  • 如果没有,是否可以将我的所有查询组合成一个多查询?

如果有人有其他建议,我会开放的。

1 个答案:

答案 0 :(得分:0)

这就是我要做的

  • 为新表创建tempVehicle和tempVehicleImages
  • 将CSV数据导入tempVehicle和tempVehicleImages,以用作临时信息持有人
  • 将tempVehicle重命名为Vehicle,将tempVehicleImages重命名为vehicleImages

这应该覆盖现有表,同时删除临时表(因为它已重命名)。

 RENAME TABLE tempVehicle TO vehicle

RENAME TABLE tempVehicleImages TO vehicleImages

重命名后,您可能还需要使用Alter Table设置索引。

作为我的旁注/宠爱之物:骆驼外壳不是我命名表的首选方式,我更喜欢vehicle和vehicle_image。这样就不存在大小写多元化的问题。

但是,这只是我做事的方式(但这是您的数据库)。

普通桌子

  • 所有小写字母
  • 下划线表示空格
  • 非复数

结点(桥)表(多对多关系)

  • 所有小写字母
  • 下划线表示空格
  • 复数

因此,如果您有vehicleimage,则可以有一个Junction表vehicles_images。这样,我知道当我看到一个复数表时就是一个联结表(两个或多个表名)。否则,我不必考虑它的vehicleImages,VehicleImages,vehicleImages,vehicleImage或任何其他组合。