2015-04-15 31 views
1

我:) 我需要从csv插入13500行和+500列。 因此,我使用加载数据infile和它的工作。按行加载数据infile命令

但是,我需要完全相同的顺序在我的MySQL数据库和我的Csv。

实际上,例如,1000线的CSV的可在800发生在我的基地

我需要的东西,如“通过COLUMN1令”,但我没有找到线索。

感谢您的帮助

PS:我有2primary键(产品ref)和不在数学顺序(如1,8,4等)

编辑:我的代码

$dataload = 'LOAD DATA LOCAL INFILE "'.__FILE__.'../../../../bo/csv/'.$nomfichier.'" 
      REPLACE 
      INTO TABLE gc_csv CHARACTER SET "latin1" 
      FIELDS TERMINATED BY "\t" 
      IGNORE 1 LINES 
     '; 

我只取CSV和使用数据的本地内嵌他......而为了is'nt完全尊重,我不知道为什么......

我的设计表

CREATE TABLE `csv` (
    `example` int(20) unsigned NOT NULL, 
    `example` int(15) unsigned NOT NULL, 
    `example` varchar(10) default NULL, 
[...] 
    `example` varchar(4) default NULL, 
    PRIMARY KEY (`RefCatSYS`,`IdProduit`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
+0

你到底在做什么?我不觉得有足够的信息。你有任何代码示例? –

+0

嗨,谢谢。我已经编辑了我的帖子以显示代码给你。 – Xenofexs

回答

0

我已经解决了这个问题。事实上,WS向我发送了一个csv,并带有两个主键的多个键。在2365行和9798行,RefCatSYS和IdProduit一样。因此,负载数据infile将9658更换第2365行,并更改顺序。

我叫他们送一个3届和第唯一的主键

感谢你们的帮助,遗憾的破坏。

0

关系数据库中的表是记录的无序集合。当您使用SORT BY运行查询时,可以按特定顺序获取行。如果查询不包含SORT BY子句,则服务器按照它们在存储介质上的顺序返回行。记录更新时,此订单有时会更改。您绝不能依赖它并始终使用SORT BY(和索引)来获取结果集中行的特定顺序。

LOAD DATA INFILE从CSV文件中读取行,并按它们在文件中的顺序插入它们。除了设置自动递增列的值(如果表中有一个),CSV文件中行的顺序并不重要。

1

向表中添加一个auto_increment列,并使用DEFAULT NULL。当您使用LOAD DATA INFILE加载数据时,该列将没有值,并且它将被分配一个自动生成的ID。选择按列排序的数据。

[email protected]:~$ sudo cat /var/lib/mysql/test/foo.csv 
10 
9 
8 
7 
6 
5 
4 
3 
2 
1 
mysql> create table tmp (example int primary key, id int unique auto_increment default null); 
Query OK, 0 rows affected (0.11 sec) 
mysql> load data infile "foo.csv" into table tmp; 
Query OK, 10 rows affected, 10 warnings (0.03 sec) 
Records: 10 Deleted: 0 Skipped: 0 Warnings: 10 
mysql> select * from tmp; 
+---------+----+ 
| example | id | 
+---------+----+ 
|  10 | 1 | 
|  9 | 2 | 
|  8 | 3 | 
|  7 | 4 | 
|  6 | 5 | 
|  5 | 6 | 
|  4 | 7 | 
|  3 | 8 | 
|  2 | 9 | 
|  1 | 10 | 
+---------+----+ 
10 rows in set (0.00 sec) 
+0

谢谢,但我不能做一个唯一的和默认值的字段... Navicat说:“不正确的表定义;只能有一个自动列,它必须被定义为一个键,如果我添加唯一,Navicat只是renove当我保存时,选中“allow null”。我的新字段id_csv的第一个值是12401,12402 ...为什么从12401开始? – Xenofexs

+0

表中不能有两个auto_increment列,是的。请注意,您在问题中的原始表格定义不完整 - 重复的列名称,以及显然缺少重要列的定义。从表格中的一列删除auto_increment子句。加载数据后,可以更改表格并移动auto_increment子句 - 将其从代理列中移除并将其添加到所需的列中。 – Kostja