请教一个navicat工具的问题

qq_41150246 2017-11-23 11:01:03
用navicat建表设定主键的唯一性以后,导入数据出现了问题。
实测中发现,录入模式选择的是添加,当源数据主键一列有重复值的时候重复值会报错不被录入,但是同时部分没有重复的数据同样也会遗漏。比如500条数据,其中200个是重复值,正常情况下应该录入300条数据,实测过程中正常录入的不到300条。
其实这个问题录入模式选择添加或更新似乎是可以解决的,但是极大的拖累了录入速度,特别是数据累积较多的时候,请问此问题产生的原因以及解决方式?
...全文
135 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2017-11-23
  • 打赏
  • 举报
回复
你按我在 #1 的做, 慢了再说。 navicat 只是一个第三方的工具, 不需要在上面结结。
qq_41150246 2017-11-23
  • 打赏
  • 举报
回复
[quote=引用 1 楼 yenange 的回复:] 这种情况, 导入时就不应该直接导入到目标表。 添加一个过渡表 tmp, 导入数据到 tmp 表, 再将 tmp 表中的数据按条件插入到 目标表 即可: 类似: [code=sql]INSERT INTO targetTable(c1,c2) SELECT c1,c2 FROM tmp AS a WHERE NOT EXISTS( SELECT * FROM targetTable AS b WHERE a.c1=b.c1 AND a.c2=b.c2 ); 还有一个疑问,所有操作相同的情况下,在插入步骤的最后一步的高级选项中,取消勾选“使用拓展插入语句”时,我不录入重复数据的要求能够达到,但是速度会被极大拖累。但是我看了一下拓展语句的原理似乎并不影响啊,为什么会产生这样两个不同的结果呢 ?
吉普赛的歌 2017-11-23
  • 打赏
  • 举报
回复
这种情况, 导入时就不应该直接导入到目标表。 添加一个过渡表 tmp, 导入数据到 tmp 表, 再将 tmp 表中的数据按条件插入到 目标表 即可: 类似:
INSERT INTO targetTable(c1,c2)
SELECT c1,c2 FROM tmp AS a
WHERE NOT EXISTS(
	SELECT * FROM targetTable AS b WHERE a.c1=b.c1 AND a.c2=b.c2 	
);

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧