#1062 - 密钥' PRIMARY'重复输入在LOAD DATA INFILE上

时间:2014-05-01 03:29:24

标签: mysql sql csv str-to-date

我一直在搜索,似乎无法解决这个问题,所以这是我的第一个Stack Exchange问​​题。

我正在使用java程序来运行批量加载过程,但我也直接从我的sql客户端MySQL Workbench尝试过,我得到了同样的错误:

LOAD DATA INFILE '/path/to/file/infile.csv' 
INTO TABLE t1
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
(category, item, date_time, v1, v2, v3);

错误:

Error Code: 1062. Duplicate entry ''Book'-'Fiction'-2014-04-16 09:33:00' for key 'PRIMARY'

使用我的sql客户端我已经确认表中没有这样的当前记录,实际上我在同一个月没有相同类别类型对的任何记录。我每月有很多(~16,000)CSV文件加载到我的MySQL数据库中,每个文件对应一个单独的类别对,在一个月内具有不同的值。到目前为止,我已成功使用此方法加载了超过5000万条记录,但是如果没有出现同样的错误,我似乎无法加载。

我的表使用3个字段来创建PRIMARY键,2 varchar()和日期时间

'CREATE TABLE `t1` (
  `category` varchar(10) NOT NULL,
  `item` varchar(15) NOT NULL DEFAULT '''',
  `date_time` datetime NOT NULL,
  `v1` double DEFAULT NULL,
  `v2` double DEFAULT NULL,
  `v3` double DEFAULT NULL,
  PRIMARY KEY (`category`,`type`,`date_time`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1'
  • 我过去曾使用过数据库,但远不及这么多 记录,我不知道这是不是问题。

  • 我可以切换为使用自动递增的ID作为我的主键, 但考虑到大量的记录,它可能会占用更多的空间 我可能会为我的(category,item,date_time)获得重复项 会有问题。

  • 我知道MySQL允许为指定值的“宽松”格式 字符串,我可能需要做一些额外的格式来计算 这个。

  • 我删除了带有值的csv文件的第一行 ''Book' - 'Fiction'-2014-04-16 09:33:00',但后来我得到了相同的1062 下一个日期时间值''Book'的错误 - 'Fiction'-2014-04-16 9点35分零零秒'

  • 我认为这可能是我格式化Datetime字符串的方式 但我使用的是“YYYY-MM-DD HH:MM:SS”格式 在数以千计的其他LOAD DATA INFILE上。为了安全,我试过了 使用STR_TO_DATE()函数见下面的

    LOAD DATA INFILE'/path/to/file/infile.csv' INTO表t1 字段被','终止 由'\ n'终止的线路 (category,item,@ date_var,v1,v2,v3) SET date_time = STR_TO_DATE(@ date_var,'%Y-%m-%d%H:%i:%s');

任何帮助都将不胜感激。

0 个答案:

没有答案