按行加载数据infile

时间:2015-04-15 18:13:43

标签: php mysql sql csv load-data-infile

我是:) 我需要从csv插入13500行和+500列。 所以,我使用负载数据infile并且它正常工作。

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

实际上,例如,csv的1000行可以在我的基地的800位

我需要像“按列1排序”这样的东西,但我找不到线索。

感谢您的帮助

Ps:我有2个主要钥匙(产品参考),而且不是数学顺序(如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并使用本地内联数据......并且命令是完全受到尊重的,我不知道为什么......

我的设计表

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;

3 个答案:

答案 0 :(得分:1)

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

kostja@annie:~$ 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)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

我要求他们发送第3张和唯一的主键

感谢您的帮助,抱歉中断。