我正在尝试更改一些关于如何在我的游戏中保存项目的旧弃用代码。当前的方法是删除所有项目,然后插入所有项目,然后插入设备(项目的子表)。它具有相当大的性能影响,我想知道将 INSERTS 更改为 INSERTS ON DUPLICATE KEY UPDATE 是否会对性能产生显着影响。
如果是这样,那么我有一个后续问题。我的计划是用它们原来的inventoryitemid加载这些物品,然后将其用作以后保存的关键。
问题是在执行以下语句时:
INSERT INTO inventoryitems (inventoryitemid, itemid) VALUES (?, ?) ON DUPLICATE KEY UPDATE ...
可能会错过一些条件。如果 MySQL 不存在默认值(自动增量),我想要的是 INSERT,否则 UPDATE。目前生成的新项目的inventoryitemid 为0,因为无论如何都是在INSERT 上生成的。
tl;dr:我需要一种方法来插入重复的密钥更新,而无需事先拥有库存项目(因为新项目是在游戏中以 0 的库存项目生成的)。目前我必须事先指定inventoryitemid 是什么,我可能无法访问该信息。
第一个目标和问题
第二个目标(没问题)
尝试解决方案:插入带有 NULL 的值以尝试触发自动增量
插入新行时,指定inventoryitemid = NULL
. 这将创建一个新行,因为它不是重复的键,并且会自动增加inventoryitemid
.
插入这样的新项目后,您可以使用LAST_INSERT_ID()
来获取inventoryitemid
分配给它的 。然后您可以将其发送到游戏代码,以便它知道新项目具有此 ID。然后它可以在未来的更新中使用这个 ID,而不是发送NULL
.
修改现有行时,请指定其inventoryitemid
. 然后ON DUPLICATE KEY UPDATE
代码将替换它而不是插入新行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句