按行顺序加载文件中的数据

load data infile order by line

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

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

其实比如csv的第1000行可以在我的base的第800处

我需要类似 "Order by column1" 的东西,但我找不到线索。

感谢您的帮助

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 并使用本地内嵌数据与他...而且顺序没有得到完全遵守,我不知道为什么...

我的设计Table

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;

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

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

将 auto_increment 列添加到您的 table,默认为 NULL。当您使用 LOAD DATA INFILE 加载数据时,该列将没有值,并且会为其分配一个自动生成的 ID。 Select 数据按列排序。

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)

我已经解决了问题。事实上,WS 向我发送了一个 csv,其中包含两个主键中的多个。在 2365 和 9798 行,RefCatSYS 和 IdProduit 相同。因此加载数据文件中的第 2365 行替换为 9798 并更改顺序。

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

感谢您的帮助,对于打扰,我们深表歉意。