【发布时间】:2015-04-13 15:41:28
【问题描述】:
我正在使用 Pentaho Data Integration 将大型 JSON 数据转换为 MySQL 数据库。
不管怎样,当然有纯表插入的选项,也可以是表插入/更新(它会查找一个key进行更新,如果没有找到就插入行)。
这些数据基本上是工单的当前表示/状态——所以我需要根据唯一工单 ID 更新给定行的所有数据列。
对于 Pentaho,可能还有大多数应用程序,更新比插入慢得多。特别是因为,至少在这个应用程序中,您最多可以有 25 个连接同时写入(插入)数据,但只有 (1) 进程执行查找-然后-写入。
因此,我宁愿执行以下操作:插入所有数据(一天左右一次).. 然后立即运行一个删除所有重复票证 ID 的查询——除了最大的票证 ID(又名latest) "更新时间。"
我觉得这样会快得多——我想知道如何在 MySQL 中实现这一点。我觉得有点像
从其中ticket_id = ticket_id 和update_time
【问题讨论】:
-
在 MySQL 中你不能有重复的主键。因此,如果插入带有现有的主键,MySQL 将自动拒绝。
-
啊,我可能说错了。我只是使用票证 ID 作为唯一标识符。我不认为我实际上将它设置为主键。
-
唯一标识符也不允许重复。你真正拥有什么? (将 CREATE TABLE 语句粘贴到您的问题中。)
-
好吧,它不是唯一标识符,只是表格反映了每张工单的当前状态。每个 Ticket_Id 应该有一行。我没有正式或技术上对 Ticket_ID 字段做任何特别的事情——它只是,从语义上讲,应该是唯一的。在实践中,暂时不会,因为我觉得使用 25 个连接来写入数据,然后删除旧的重复项,比更新唯一键更快。我只是想弄清楚如何做到这一点。
-
你不能让 TICKETID 唯一字段或作为主字段,以便 MySQL 在插入自身时拒绝重复的行。?你试过吗?
标签: mysql duplicates primary-key insert-update