MySQL导入SQL文件报错:PRIMARY键存在重复条目'1'的问题咨询
没错,你碰到的这个错误百分百是主键ID重复导致的。当你尝试把cdrdata-oldsystem.sql里的cdrdata表数据导入到ucl_db的同名表时,目标表中已经存在一条主键ID为1的记录,而你要导入的SQL文件里也有一条ID为1的记录——MySQL的主键约束要求主键值必须唯一,冲突之下就抛出了这个报错。
给你几个实用的解决思路,根据你的实际需求选就行:
清空目标表后重新导入:如果
ucl_db.cdrdata里的现有数据对你没用,可以先彻底清空表再导入。执行这条SQL命令:TRUNCATE TABLE ucl_db.cdrdata;执行完再重新跑你的导入命令
mysql -u root -p ucl_db < cdrdata-oldsystem.sql就行。注意:TRUNCATE会直接删除所有数据且无法恢复,操作前一定要确认数据不需要保留。修改导入SQL里的主键值:如果目标表的数据要保留,你可以打开
cdrdata-oldsystem.sql文件,把所有INSERT语句里的主键ID改成目标表中不存在的数值。比如先查一下目标表的最大ID:SELECT MAX(id) FROM ucl_db.cdrdata;假设查到最大ID是1000,就把导入的所有ID改成1001及以上,这样就不会冲突了。
用
INSERT IGNORE跳过重复记录:把SQL文件里的INSERT替换成INSERT IGNORE,这样MySQL会自动跳过那些主键重复的记录,只导入不冲突的数据。缺点是重复主键的导入数据会被丢弃,适合你不需要这些重复数据的场景。用
REPLACE INTO覆盖重复记录:如果希望用导入的数据替换目标表中主键重复的现有数据,就把INSERT改成REPLACE INTO。MySQL会先删除目标表中主键匹配的旧记录,再插入新的导入记录,适合需要更新数据的场景。
内容的提问来源于stack exchange,提问作者lin Joe

