2016-06-08 80 views
0

好吧,我做了一些代碼,將一些行插入到SQL中,如果該行存在,它將被更新。ON DUPLICATE KEY UPDATE壞迴應

現在我的問題是 它應該檢查weaponID是否存在,而不是ID。 因此,例如

它應該如何工作? 應該有多行WeaponID的分配人員ID。將有許多行(每個球員約25),但我不能這樣做...

我不知道如何解釋我想實現的... 基本上用戶將有大約25行內的這張表,但我只想更新,如果有相同的ID和WEAPON ID行,如果有,插入。

INSERT INTO `weapon_skills` VALUES (%d,'%e',%d, %d) ON DUPLICATE KEY UPDATE `Skill`=%d 

這是結構

CREATE TABLE `weapon_skills` (
`ID` INT(11) NOT NULL DEFAULT '0', 
`WeaponID` INT(3) NOT NULL DEFAULT '0', 
`Username` VARCHAR(24) NOT NULL DEFAULT '0', 
`Skill` INT(20) NULL DEFAULT '0', 
PRIMARY KEY (`ID`) 

基本上,如果不存在具有例如ID的行:0和武器ID:24然後更新,如果有原位缺口,創建新

回答

0

作爲mysql文檔insert ... on duplicate key update說:

如果指定ON DUPLICATE KEY UPDATE,並插入一行會導致dupl在UNIQUE索引或PRIMARY KEY中創建值,MySQL執行舊行的UPDATE。

你應該創建用戶名和weaponid列的唯一索引。如果您嘗試使用表中已存在的同一武器爲同一用戶插入記錄,則重複鍵子句將啓動。如果需要,id字段應該可能是一個自動增量字段。

請注意,使用數字用戶標識字段而不是文本用戶名來標識記錄屬於哪個用戶會更有效。

除非您的ID字段代表您的用戶ID。在這種情況下,將武器ID添加到主鍵而不是創建唯一的鍵。但是我會在這個實例中從表中刪除用戶名字段。

+0

是的!而已!獨特的鑰匙!非常感謝好友! 關於他們的鑰匙哈哈是啊,我用ID作爲UniqueID和WeaponID作爲標識符。非常感謝!!! –

0

「上的重複密鑰更新」只會工作,如果關鍵是違反了,所以考慮通過增加weaponID改變的關鍵。

CREATE TABLE `weapon_skills` (
`ID` INT(11) NOT NULL DEFAULT '0', 
`WeaponID` INT(3) NOT NULL DEFAULT '0', 
`Username` VARCHAR(24) NOT NULL DEFAULT '0', 
`Skill` INT(20) NULL DEFAULT '0', 
PRIMARY KEY (`ID`,`WeaponID`) 

如果你不想改變密鑰,那麼考慮在mySql中創建一個過程來手動完成它。你也可以在後臺進行。

相關問題