我正在向MySQL输入大量数据,这些数据经常被更新(基于唯一索引)。
鉴于以下陈述......
INSERT INTO 'players' ('id', 'parent', 'child_name')
VALUES
('1', '100', 'john'),
('2', '200', 'bob'),
('3', '300', 'chris')
ON DUPLICATE KEY UPDATE `parent` = VALUES(`parent`), `child_name` =
VALUES(`child_name`), `id` = VALUES(`id`)
在某些情况下,Feed不正确且父级不存在,因此失败并显示错误..
Cannot add or update a child row: a foreign key constraint fails
我想知道的是,它是否在此bulk
upsert上插入好行或整个语句是否失败,如果是这样,我需要添加ignore
以确保它有效吗?
非常感谢提前
答案 0 :(得分:0)
带有innodb的MySql(可能是您的引擎)是ACID。默认情况下Innodb上的所有insert语句都是自动完成的,这意味着如果语句的任何部分失败,则不会发生插入。
您可以使用IGNORE,任何失败的值集都会被完全跳过,但是我不建议这样做,因为它会默默地隐藏任何其他错误(您可能不会想到的其他错误)。为什么在插入之前不验证记录是否符合约束?
同样,您可以更改交易设置并插入tansaction:https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html。但是,说实话,我从来没有这样做,所以我不确定如果几行失败会怎么样。在失败的一个停止插入之后剩余的那个会停止吗?