我想改变一些旧的弃用代码,如何在我的游戏中保存项目。目前的方法是删除所有项目,然后插入所有项目,然后插入设备(项目的子表)。它具有相当大的性能影响,我想知道是否将INSERTS更改为INSERTS ON DUPLICATE KEY UPDATE会对性能产生显着影响。调整插入重复密钥更新
如果是这样,那么我有一个后续问题。我的计划是使用原始的inventoryitemid加载项目并将其用作稍后保存的密钥。
的问题是执行这个下面的语句时:
INSERT INTO inventoryitems (inventoryitemid, itemid) VALUES (?, ?) ON DUPLICATE KEY UPDATE ...
可能会错过一些条件。我想为MySQL插入,如果它不存在默认值(自动增量),否则更新。目前,使用inventoryitemid生成的新项目由于在INSERT上生成密钥而生成。我需要一种方法来在INSERT ON DUPLICATE KEY UPDATE之前事先没有inventoryitemid(因为新物品是在inventoryizemid为0的游戏中生成的)。目前我必须事先指定inventoryitemid,我可能无法访问这些信息。
第一个目标和问题
- 尝试插入不在数据库中事先不具有inventoryitemid存在的新项目。
- 项目没有插入数据库,下一个递增的db值。
第二个目标(没有问题)
- 试图插入项目插入数据库与现有的库存为itemid
- 数据库更新项目数据库中的成功(耶!)
尝试解决方案:使用NULL插入值以尝试触发自动增量
听起来像REPLACE,而不是INSERT可以节省您的问题(https://dev.mysql.com/doc/refman/5.7/en/replace.html) – TadejP
'itemid'是唯一的吗? –
@TadejP'REPLACE'需要与'INSERT ON DUPLICATE KEY UPDATE'相同的唯一性标准。 – Barmar