我找了一个类似的问题,但我找不到一个神奇的答案....所以我希望我现在能找到一个,因为这让我发疯!
我在向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 |
提前感谢我解决问题的方法,有太多我不知道的事情 - 这很有趣,同时也很令人沮丧!
答案 0 :(得分:4)
我认为你有两个问题。
在您的DDL中,
genre_pk
是TINYINT。所以genre_pk
可以容纳0~255。AUTO_INCREMENT=255
genre_pk
的初始值设置为255 您需要将LINES TERMINATED BY
从'\ r'更改为'\ n'
我已经测试过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);
当表格中有不应删除的数据时。
ALTER TABLE table_name AUTO_INCREMENT = n;
可以删除现有数据。 (这是你已经尝试过的)
TRUNCATE TABLE table_name;
这很奇怪。一般来说,
我从来没有听说'\ 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'。