如何运行不基于存在自动增量 id 的多个列替换重复项的 MYSQL 插入查询


How to run a MYSQL INSERT query that doesn't replace duplicates based on multiple columns where auto-increment id is present?

我已经四处寻找答案,并遇到了忽略和不存在的地方,但是它们似乎都与我想要完成的略有不同。我的 MYSQL 表如下所示:

id(auto increment INT), charactername(VARCHAR), characterregion(VARCHAR), characterrealm(VARCHAR)

我的数据是从返回游戏所有角色的网站检索的,甚至是我数据库中已有的角色。

我希望保留所有字符的列表,但没有重复项。我的问题似乎是我需要在决定它是否重复之前比较角色的名称、领域和地区,因为相同的名称可能会出现在不同的地区/领域组合中。

我尝试比较 3 个非自动递增列的所有值,如下所示:

替换为字符 ( characternamecharacterregioncharacterrealm ) 不存在的值("彼得","美国","Realm1")(从charactername='彼得'和characterregion='美国'和characterrealm='Realm1'的字符中选择*)

但是,这将返回MYSQL错误,因为语法不正确。我也尝试过插入忽略到...但是,这似乎只是在检查ID值。我认为我根本不需要检查 id,因为我已将其设置为自动递增。

任何帮助将不胜感激,如果有帮助,我将PHP用于其他部分。再次感谢。

只需在所有 3 列上添加一个复合索引。

alter ignore table mytable add unique index(charactername, characterregion, characterrealm);

然后做

INSERT INTO characters (charactername, characterregion, characterrealm)  
VALUES ('Peter','AMERICA','Realm1')  
ON DUPLICATE KEY 
UPDATE
charactername='Peter1',characterregion='AMERICA1',characterrealm='Realm11'

仅当所有 3 列相同时,才会触发更新。或者你可以只做一个 INSERT,如果所有 3 列都相同,它将失败。