MySQL LOAD DATA INFILE存储行号

时间:2014-05-09 16:31:46

标签: php mysql load-data-infile

我使用MySQL LOAD DATA INFILE将CSV文件数据移动到数据库表中。 我正在寻找一种方法来引用导入记录中的原始文件行号(行)。

这样的表格如下:

CREATE TABLE tableName (
  uniqueId INT UNSIGNED NOT NULL PRIMARY_KEY,
  import_file VARCHAR(100),
  import_line INT,
  import_date = DATETIME,
  fieldA VARCHAR(100),
  fieldB VARCHAR(100),
  fieldC VARCHAR(100)
);

其中import_file,import_line和import数据是与特定文件导入相关的元数据。 fieldA,fieldB和fieldC表示文件中的实际数据。

将通过以下查询进行更新:

LOAD DATA INFILE '$file' 
REPLACE
INTO TABLE '$tableName' 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
LINES TERMINATES BY '\n'
IGNORE 1 LINES # first row is column headers
(fieldA,fieldB,fieldC)
SET import_date = now(), 
import_file = '" . addslashes($file) . "', 
import_line = '???';

是否有我可以设置的变量' import_line'到吗

谢谢,

-M

1 个答案:

答案 0 :(得分:2)

您可以先设置用户变量,然后在SET子句中增加此变量,即

SET @a:=0;                                       -- initialize the line count
LOAD DATA INFILE 'c:/tools/import.csv'           -- my test import 
REPLACE
INTO TABLE tableName 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES # first row is column headers
(fieldA,fieldB,fieldC)
SET import_date = now(), 
import_file = 'import.csv',               
import_line = @a:=@a+1;                          -- save the incremented line count