我正在使用 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_date 是与特定文件导入相关的元数据。 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
最佳答案
您可以通过先设置一个用户变量,然后在 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
关于php - MySQL LOAD DATA INFILE 存储行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569704/