我有一个 PHP 脚本提取一个静态的 JSON 文件,每 10 秒更新一次。它包含一些发生的事件的详细信息,它只是添加到 JSON 文件的顶部。然后我将它们插入到 MySQL 数据库中。
因为我每次拉取文件时都必须拉取每个事件,所以我只会插入新事件。简单的方法是在数据库中搜索事件(主键不相同),但我说的是每天约 4000 个事件,我不希望有那么多查询只是为了看看它是否存在。
我知道 INSERT IGNORE
,但看起来它只使用 PRIMARY_KEY
来执行此操作。
我该怎么做(最好是轻松地)来防止两个键重复?
例子:
我有一个包含以下列的表 events
:
- ID(无关紧要,真的)
- event_id(我需要从源存储)
- action_id(多个action_id属于一个event_id)
- 时间戳
- 随便...
我的数据是我的 JSON 在第一次拉取时出现,如下所示:
event_id|action_id|...
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
2 | 3
然后下一个pull是这样的:
event_id|action_id|...
1 | 1
1 | 2
1 | 3
1** | 4**
1** | 5**
2 | 1
2 | 2
2 | 3
2** | 4**
我只希望插入标有星号的行,而忽略其他行。请记住,primary_key
列 id
完全在这个表中,我只是为了普遍使用它。
我可以使用什么命令来“插入”我提取的每个事件,但只添加那些没有通过 event_id
和 action_id
两列复制的事件。
谢谢。
最佳答案
为两列创建唯一索引。
CREATE
UNIQUE INDEX event_action
ON tablename (event_id, action_id)
关于php - 从静态文件 JSON 提要更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29811710/