LOAD DATA INFILE正在跳过所有行而没有警告

时间:2014-02-03 01:24:53

标签: mysql load-data-infile

我找了一个类似的问题,但我找不到一个神奇的答案....所以我希望我现在能找到一个,因为这让我发疯!

我在向MySQL导入CSV数据方面做得很好......而且现在突然间我只得到了跳过的记录。我应该提一下,我一直在做很多删除记录(只是在我学习MySQL和构建我的第一个数据库时进行实验)所以我一直在砍伐和更改数据,包括在Excel中进行大量复制/粘贴,只是万一这可能导致麻烦。

这里有一个示例,我将CSV切换为仅2条记录:

GENRE_NAME
Classic Rock
Electronica

加载数据的查询:

LOAD DATA INFILE 'Music_All_2.csv' IGNORE INTO TABLE genres COLUMNS TERMINATED BY ',' ESCAPED BY '\\' LINES TERMINATED BY '\r' IGNORE 1 LINES (genre_name);
Query OK, 0 rows affected (0.00 sec)
Records: 2  Deleted: 0  Skipped: 2  Warnings: 0

表格是空的(因为它们已经存在,所以它不会跳过它们):

select * from genres;
Empty set (0.00 sec)

最后,这是SHOW CREATE TABLE genres输出:

genres | CREATE TABLE `genres` (
`genre_pk` tinyint(2) unsigned NOT NULL AUTO_INCREMENT,
 `genre_name` varchar(90) NOT NULL,
  PRIMARY KEY (`genre_pk`),
 UNIQUE KEY `genre_name` (`genre_name`)
) ENGINE=InnoDB AUTO_INCREMENT=255 DEFAULT CHARSET=latin1 |

提前感谢我解决问题的方法,有太多我不知道的事情 - 这很有趣,同时也很令人沮丧!

1 个答案:

答案 0 :(得分:4)

我认为你有两个问题。

1。 AUTO_INCREMENT值

在您的DDL中,

  • genre_pk是TINYINT。所以genre_pk可以容纳0~255。
  • 在CREATE STATEMENT结尾,AUTO_INCREMENT=255
    • 这会将genre_pk的初始值设置为255

2。

终止的线路

您需要将LINES TERMINATED BY从'\ r'更改为'\ n'

3。摘要

我已经测试过SQL,它运行良好。

<强> DDL

CREATE TABLE `genres` (
`genre_pk` tinyint(2) unsigned NOT NULL AUTO_INCREMENT,
 `genre_name` varchar(90) NOT NULL,
  PRIMARY KEY (`genre_pk`),
 UNIQUE KEY `genre_name` (`genre_name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

加载数据

LOAD DATA INFILE '/path/to/Music_All_2.csv'
INTO TABLE genres FIELDS TERMINATED BY ',' ESCAPED BY '\\'
LINES TERMINATED BY '\n' IGNORE 1 LINES (genre_name);

回复OP的评论

1)如何重置AUTO_INCREMENTed值

  • 当表格中有不应删除的数据时。

    ALTER TABLE table_name AUTO_INCREMENT = n;
    
  • 可以删除现有数据。 (这是你已经尝试过的)

    TRUNCATE TABLE table_name;
    

2)'\ n'v.s'\ r'

这很奇怪。一般来说,

  • '\ n'对于Unix系统
  • '\ r \ n'for Windows system

我从来没有听说'\ r'回车。 MySQL manaul(http://dev.mysql.com/doc/refman/5.5/en/load-data.html)声明

  

如果您在Windows系统上生成了文本文件,则可能必须使用LINES TERMINATED BY'\ r \ n'来正确读取文件,因为Windows程序通常使用两个字符作为行终止符。某些程序(如写字板)在编写文件时可能会使用\ r \ n作为行终止符。要读取此类文件,请使用LINES TERMINATED BY'\ r'。