好吧,所以我做了一些代码,将一些行插入到SQL中,如果该行存在,它将被更新。
现在我的问题是 它应检查武器ID是否存在,而不是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和Weapon ID:24然后更新,如果没有,则创建新的
答案 0 :(得分:0)
正如insert ... on duplicate key update上的mysql文档所说:
如果指定ON DUPLICATE KEY UPDATE,并且插入的行会导致UNIQUE索引或PRIMARY KEY中出现重复值,则MySQL会执行旧行的UPDATE。
您应该在username和weaponid列上创建唯一索引。如果您尝试使用表中已有的相同武器为同一用户插入记录,则重复键子句将启动。如果需要,id字段可能应该是自动增量字段。
请注意,使用数字用户ID字段而不是文本用户名来识别记录所属的用户会更有效。
除非您的ID字段代表您的用户ID。在这种情况下,将武器ID添加到主键而不是创建唯一键。但是我会在这个例子中从表中删除用户名字段。
答案 1 :(得分: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中创建一个手动执行该过程。您也可以在后端级别执行此操作。