向MySQL的members表插入数据时遇重复条目错误,如何解决?
解决MySQL插入多行数据时主键重复的问题
问题原因
你的members表中id字段是主键或带有唯一约束,当前表内已经存在id='2'的记录。MySQL默认的INSERT语句是原子操作——只要有一条数据违反约束,整批插入都会失败,因此id=3、4的记录也无法插入。
解决方法
根据你的需求选择以下方案:
1. 替换现有id=2的记录,同时插入其他数据
使用REPLACE INTO,它会先删除冲突的记录,再插入新数据:
USE airdogs; REPLACE INTO members VALUES ('2', 'Arnonn Alloband', 'company-captain', 'Strell', 'male', 'Frostbite', '7', '5375-01-04', NULL), ('3', 'Kendrow Tellman', 'company-private', 'Strell', 'male', 'Carefersian', '1', '5380-01-09', NULL), ('4', 'Barmar Tosceni', 'company-private', 'Ithrenian', 'male', 'Brimstone', '4', '5382-01-11', NULL);
2. 跳过冲突记录,只插入无重复的数据
使用INSERT IGNORE,它会忽略违反约束的行,正常插入其他符合要求的记录:
USE airdogs; INSERT IGNORE INTO members VALUES ('2', 'Arnonn Alloband', 'company-captain', 'Strell', 'male', 'Frostbite', '7', '5375-01-04', NULL), ('3', 'Kendrow Tellman', 'company-private', 'Strell', 'male', 'Carefersian', '1', '5380-01-09', NULL), ('4', 'Barmar Tosceni', 'company-private', 'Ithrenian', 'male', 'Brimstone', '4', '5382-01-11', NULL);
3. 只插入无冲突的id=3、4记录
如果不需要修改现有id=2的记录,直接删除插入语句中id=2的行即可:
USE airdogs; INSERT INTO members VALUES ('3', 'Kendrow Tellman', 'company-private', 'Strell', 'male', 'Carefersian', '1', '5380-01-09', NULL), ('4', 'Barmar Tosceni', 'company-private', 'Ithrenian', 'male', 'Brimstone', '4', '5382-01-11', NULL);
4. 先确认现有id=2的记录内容
执行以下语句查看当前id=2的记录,再决定后续操作:
SELECT * FROM members WHERE id = '2';
内容的提问来源于stack exchange,提问作者Michael Joseph
相关产品推荐
相关产品推荐

