这是我的代码:
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-坏帽子哈利 Productions-9168' 用于密钥"uc_production_companies">
你情况中的答案可能与你的(我的?SQL服务器比PHP。
让我们考虑一下指示代码执行的步骤:
- 运行
INSERT
语句 - 检查语句中是否有任何重复键
- 如果检测到重复键,请使用给定的(固定(值填充某些字段。
现在,如果您在 ON DUPLICATE
子句填写的任何字段上有UNIQUE
索引,则很可能在任何触发的重复 INSERT 语句上都会重复该索引。
看看你的例子,你的索引似乎UNIQUE
production_companies_name
列在所有触发器上都违反了ON DUPLICATE
,因此只有第一个触发器有效,其余所有触发器都将抛出此错误。
可能的解决方案:
- 从
production_companies_name
列中删除UNIQUE
类型索引(如果有(。 - 不要尝试用静态值填充任何
UNIQUE
索引。 - 不要尝试填写任何
UNIQUE
索引。
让我知道这是否有帮助:-(