多个ON DUPLICATE KEY UPDATE值

时间:2015-12-20 11:46:49

标签: php

这是我的代码:

INSERT INTO titles_production_companies (production_companies_name, production_companies_tmdb_id, title_id)
values
    ('United Artists', '60','1'),
    ('Achte Babelsberg Film', '6100','1'),
    ('Metro-Goldwyn-Mayer (MGM)', '8411','1'),
    ('Bad Hat Harry Productions', '9168','1')
ON DUPLICATE KEY UPDATE
    title_id=LAST_INSERT_ID(title_id),
    production_companies_name='United Artists',
    production_companies_tmdb_id='60',
    title_id='1',
    production_companies_name='Achte Babelsberg Film',
    production_companies_tmdb_id='6100',
    title_id='1',
    production_companies_name='Metro-Goldwyn-Mayer (MGM)',
    production_companies_tmdb_id='8411',
    title_id='1',
    production_companies_name='Bad Hat Harry Productions',
    production_companies_tmdb_id='9168', title_id='1'; 

我收到了这条消息:

  

完整性约束违规:1062重复录入'1-Bad Hat Harry   制作-9168'用于关键'uc_production_companies''

1 个答案:

答案 0 :(得分:0)

您的情况下的答案可能与您的(My?)SQL服务器有关,而不是与PHP相关。

让我们考虑一下您的代码执行步骤:

  1. 运行INSERT声明
  2. 检查声明中是否有任何重复的密钥
  3. 如果检测到重复键,请使用给定(固定)值填充某些字段。
  4. 现在,如果您在UNIQUE子句填写的任何字段上有ON DUPLICATE索引,则很可能在任何触发的重复INSERT上都会重复言。

    看一下你的例子,看来你的索引为UNIQUE 所有production_companies_name个触发器都违反了ON DUPLICATE列,因此只有第一个会起作用,其余的都会抛出此错误。

    可能的解决方案:

    1. UNIQUE列中删除production_companies_name类型索引(如果有)。
    2. 请勿尝试使用静态值填写任何UNIQUE索引。
    3. 请勿尝试填写任何UNIQUE索引。
    4. 如果有帮助,请告诉我: - )