MySQL插入。。。关于重复密钥更新和忽略
我正在向MySQL输入大量数据,这些数据经常更新(基于唯一索引) 鉴于以下陈述MySQL插入。。。关于重复密钥更新和忽略,mysql,Mysql,我正在向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_na
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`)
在某些情况下,源不正确且父级不存在,因此失败,错误为
无法添加或更新子行:外键约束失败
我想知道的是,它是在这个批量
upsert中插入好的行,还是整个语句都失败了,如果是这样,我需要添加忽略
以确保它工作吗
非常感谢innodb的MySql(很可能是您的引擎)是ACID。默认情况下,Innodb上的所有insert语句都是以原子方式完成的,这意味着如果语句的任何部分失败,就不会进行插入
您可以使用IGNORE,任何失败的值集都将被完全跳过,但是我不建议这样做,因为它会隐藏任何其他错误(您可能不期望的其他错误)。为什么不在插入之前验证满足约束的记录
类似地,您可以更改事务设置并插入事务:。但是,老实说,我从来没有这样做过,所以我不确定如果有几行失败,结果会怎样。在失败的一个之后,其余的会停止插入吗 嗨,Ray,数据量太大,很难验证它,你知道ignore是否可以与on duplicate key insert结合使用吗?是的。忽略工作正常,它只是抑制错误(任何错误)。非常好,谢谢。有没有办法获取这些错误?Im每10秒插入几千条记录,因此它们给我带来的麻烦远不止好处。但不管怎样,还是想让他们落后?不,据我所知不是。也许有必要弄清楚您是如何/为什么频繁插入中断外键的值的。忽略会将错误减少为警告,这样您仍然可以获得有关失败内容的信息。