MySQL的LOAD DATA LOCAL INFILE只导入单行(MySQL LOAD DATA

2019-07-19 01:35发布

我们有成千上万的在它记录的CSV文件。 我想通过phpMyAdmin来这些行导入到一个MySQL表。 这里是所使用的命令:

load data local infile '/var/www/html/deansgrads_201280.csv' 
into table ttu_nameslist
fields terminated by ','
enclosed by '"'
lines terminated by '\r\n'
(firstname, middlename, lastname, city, county, state, termcode, category)

有一个在被设置为自动递增的表中的ID字段。 当我们执行这个SQL只有第一线导入到表中。

输入数据文件行:

"Aaron","Al","Brockery","Cookeville","Putnam","TN","201280","deanslist"
"Aaron","Dan","Mickel","Lebanon","Wilson","TN","201280","deanslist"

表结构:

CREATE TABLE `ttu_nameslist` (
  `id` int(11) NOT NULL,
  `firstname` varchar(50) NOT NULL,
  `middlename` varchar(50) NOT NULL,
  `lastname` varchar(50) NOT NULL,
  `city` varchar(50) NOT NULL,
  `county` varchar(50) NOT NULL,
  `state` varchar(2) NOT NULL,
  `termcode` varchar(6) NOT NULL,
  `category` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1

我在做什么错,为什么它添加一行后退出?

Answer 1:

你说的ID字段的AUTO_INCREMENT属性,但有一个在没有它的提CREATE TABLE语句。 这是问题的一部分。

另一部分则是那些截断警告。 一些在CSV文件中的行可能包含是太长的列中的数据。 提高这些文本列到一个更大的值的大小(假设200),然后再试一次。

你绝对确保CSV文件是有效的? (又名每一行有值的相同数量的等)。 你或许应该检查是否这些字符串包含逗号( , ),尽管这不应该是一个问题。



Answer 2:

为什么MySQL的LOAD DATA INFILE命令只装一排?

正在发生的事情是,你加载的第一列细,那么当你加载第二个因为是违反唯一索引约束失败。

MySQL的LOAD DATA LOCAL INFILE将强制你在列的唯一索引,然后跳过任何违规重复的行没有做任何事情,甚至没有记录警告!

如何重现此phenemenon:

  1. 创建一个int和varchar列的表:

     mysql> create table foo(id INT, mytext VARCHAR(255)); Query OK, 0 rows affected (0.02 sec) 
  2. 添加在VARCHAR列唯一约束:

     mysql> alter table foo add constraint my_epic_constraint unique(mytext); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 
  3. 创建您输入的文本文件/tmp/foo.txt,由制表符分隔的,这违反了唯一约束:

     1 fred 2 fred 
  4. 尝试汇入:

     mysql> load data local infile '/tmp/foo.txt' into table foo fields terminated by '\t' lines terminated by '\n' (@col1,@col2) set id=@col1, mytext=@col2; Query OK, 1 row affected (0.01 sec) Records: 2 Deleted: 0 Skipped: 1 Warnings: 0 

BAM! 这里是你的问题:为什么只进口只有一排? 因为你有在数据文件中的行违反了它独特的键约束。

解决方案:

  1. 删除你的表中的唯一键约束,然后再试一次。

  2. 进入到文本文件,并删除违反唯一约束重复的行。



Answer 3:

我有同样的问题,我解决了使用多布尔引号为“\ r \ n”,而不是“\ r \ n”



文章来源: MySQL LOAD DATA LOCAL INFILE only imports a single row