我正在向 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`)
在某些情况下,提要不正确且父级不存在,因此失败并出现错误...
无法添加或更新子行:外键约束失败
我想知道的是,它是在这个 bulk
upsert 上插入好行还是整个语句失败,如果是这样,我需要添加 ignore
到确保它有效?
提前致谢
最佳答案
带有 innodb 的 MySql(可能是您的引擎)是 ACID。默认情况下,Innodb 上的所有插入语句都是自动完成的,这意味着如果语句的任何部分失败,则不会发生插入。
您可以使用 IGNORE 并且任何失败的值集都将被完全跳过,但是我不推荐这样做,因为它会默默地隐藏任何其他错误(其他您可能不会想到的)。为什么不在插入前验证记录是否满足约束?
同样,您可以更改交易设置并插入交易:https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html .但是,老实说,我从来没有这样做过,所以我不确定如果几行失败会怎样。失败的那个之后剩下的会停止插入吗?
关于MySQL INSERT ...在重复键更新和忽略时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49090132/