我们有成千上万的在它记录的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
我在做什么错,为什么它添加一行后退出?
你说的ID字段的AUTO_INCREMENT
属性,但有一个在没有它的提CREATE TABLE
语句。 这是问题的一部分。
另一部分则是那些截断警告。 一些在CSV文件中的行可能包含是太长的列中的数据。 提高这些文本列到一个更大的值的大小(假设200),然后再试一次。
你绝对确保CSV文件是有效的? (又名每一行有值的相同数量的等)。 你或许应该检查是否这些字符串包含逗号( ,
),尽管这不应该是一个问题。
为什么MySQL的LOAD DATA INFILE命令只装一排?
正在发生的事情是,你加载的第一列细,那么当你加载第二个因为是违反唯一索引约束失败。
MySQL的LOAD DATA LOCAL INFILE
将强制你在列的唯一索引,然后跳过任何违规重复的行没有做任何事情,甚至没有记录警告!
如何重现此phenemenon:
创建一个int和varchar列的表:
mysql> create table foo(id INT, mytext VARCHAR(255)); Query OK, 0 rows affected (0.02 sec)
添加在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
创建您输入的文本文件/tmp/foo.txt,由制表符分隔的,这违反了唯一约束:
1 fred 2 fred
尝试汇入:
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! 这里是你的问题:为什么只进口只有一排? 因为你有在数据文件中的行违反了它独特的键约束。
解决方案:
删除你的表中的唯一键约束,然后再试一次。
进入到文本文件,并删除违反唯一约束重复的行。
我有同样的问题,我解决了使用多布尔引号为“\ r \ n”,而不是“\ r \ n”