INSERT ON DUPLICATE KEY UPDATE多行,检查每行的重复

时间:2018-01-30 22:11:15

标签: php mysql database insert rows

以下代码的预期行为是,对于每一行,它检查是否存在重复,如果是,则更新而不是插入。它分别为EACH行执行此操作,这意味着查找某个行的副本不会导致后续所有其他行的UPDATE。 UNIQUE键是member_id。

INSERT INTO table 
  (member_id, member_name, stat1, stat2) VALUES 
    ('1', 'user1', '1411', '1410'), 
    ('15', 'user2', '177', '179'), 
    ('83', 'user3', '517', '832'), 
    ('184', 'user4', '805', '1165'), 
    ('304', 'user5', '708', '705')
ON DUPLICATE KEY UPDATE 
  stat1 = VALUES(stat1), 
  stat2 = VALUES(stat2)

然而,这似乎是从找到member_id的重复键的第一刻开始的UPDATE。

E.g。 user2已经存在,因此请执行UPDATE而不是INSERT。但它会对user3,user4,user5进行UPDATE,即使它们可能不存在。这会导致以下错误:

Unknown column 'user3' in 'field list'

如何确保检查EACH行的副本,如果没有重复,请插入?

编辑: 我的查询的更准确的片段:

INSERT INTO reputation_p_month (member_id, member_name, january_2018_rep, acc_january_2018_rep) VALUES
  ('1', 'GreatJackal', '1411', '1410'),
  ('15', 'wetletus', '177', '177'), 
  ('83', 'strongandbald', '517', '517'),
  ('14375', 'Newer', '0', '0'), 
  ('14379', 'RobsenMeister', '0', '0'), 
  (14405, Griffin, 0, 0) 
ON DUPLICATE KEY UPDATE 
  january_2018_rep = VALUES(january_2018_rep), 
  acc_january_2018_rep = VALUES(acc_january_2018_rep)

在控制台中出现以下错误:

  参数列表

之后的

Uncaught SyntaxError:missing)      

'调试对象:在“字段列表”中更新REP:未知列'Griffin'的记录时出错

1 个答案:

答案 0 :(得分:0)

您的查询完全正常,应该完全产生您期望的结果。

错误讯息

Unknown column 'user3' in 'field list'

实际上意味着,您的查询在某个时候将Valueuser3视为column

从发布的查询中,我们无法确定问题,我猜你会以某种方式对查询进行简化/混淆,但后缀示例是偶然的。

检查是否要插入由反引号括起的user3的用户值,例如

`user3`

而不是

'用户3'

(后退标记用于COLUMN名称,而不是值,然后会产生您正面临的错误消息)

enter image description here