我想改變一些舊的棄用代碼,如何在我的遊戲中保存項目。目前的方法是刪除所有項目,然後插入所有項目,然後插入設備(項目的子表)。它具有相當大的性能影響,我想知道是否將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