2015-04-15 43 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