Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL插入。。。关于重复密钥更新和忽略_Mysql - Fatal编程技术网

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

我正在向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`)
在某些情况下,源不正确且父级不存在,因此失败,错误为

无法添加或更新子行:外键约束失败

我想知道的是,它是在这个
批量
upsert中插入好的行,还是整个语句都失败了,如果是这样,我需要添加
忽略
以确保它工作吗

非常感谢innodb的MySql(很可能是您的引擎)是ACID。默认情况下,Innodb上的所有insert语句都是以原子方式完成的,这意味着如果语句的任何部分失败,就不会进行插入

您可以使用IGNORE,任何失败的值集都将被完全跳过,但是我不建议这样做,因为它会隐藏任何其他错误(您可能不期望的其他错误)。为什么不在插入之前验证满足约束的记录


类似地,您可以更改事务设置并插入事务:。但是,老实说,我从来没有这样做过,所以我不确定如果有几行失败,结果会怎样。在失败的一个之后,其余的会停止插入吗

嗨,Ray,数据量太大,很难验证它,你知道ignore是否可以与on duplicate key insert结合使用吗?是的。忽略工作正常,它只是抑制错误(任何错误)。非常好,谢谢。有没有办法获取这些错误?Im每10秒插入几千条记录,因此它们给我带来的麻烦远不止好处。但不管怎样,还是想让他们落后?不,据我所知不是。也许有必要弄清楚您是如何/为什么频繁插入中断外键的值的。忽略会将错误减少为警告,这样您仍然可以获得有关失败内容的信息。