2016-06-08 78 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中创建一个过程来手动完成它。你也可以在后台进行。

相关问题