6

我有一个table_name这样的:

No | Name | Inserted_Date | Inserted_By
=====================================

然后我有这样的文件名.csv

no,name
1,jhon
2,alex
3,steve

我想table_name使用如下语法加载这些文件:

LOAD DATA INFILE 'name.csv' INTO TABLE table1
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
???

问题是,我应该穿什么,???这样我才能存储这样的数据:

No | Name  | Inserted_Date | Inserted_By
=====================================
1  | jhon  | sysdate()     | me
2  | ales  | sysdate()     | me
3  | steve | sysdate()     | me
4

5 回答 5

24

我不明白您的表中是否inserted_date已经inserted_by存在列。如果没有,您可以在运行之前添加它们LOAD DATA INFILE

LOAD DATA INFILE 'name.csv' INTO TABLE table1
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(@no, @name)
set
  no = @no,
  name = @name,
  inserted_date = now(),
  inserted_by = 'me'
于 2012-09-21T13:14:42.977 回答
2

像这样的事情会做到这一点:

LOAD DATA INFILE 'name.csv' INTO TABLE table1 
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
    SET inserted_date=CURRENT_DATE(), inserted_by='me'

看看手册: http ://dev.mysql.com/doc/refman/5.1/en/load-data.html

于 2012-09-21T13:17:00.670 回答
0

1分钟内在数据库中批量插入超过7000000条记录(带计算的超快速查询)

mysqli_query($cons, '
    LOAD DATA LOCAL INFILE "'.$file.'"
    INTO TABLE tablename
    FIELDS TERMINATED by \',\'
    LINES TERMINATED BY \'\n\'
    IGNORE 1 LINES
    (isbn10,isbn13,price,discount,free_stock,report,report_date)
     SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))),
         RRP_nl = RRP * 1.44 + 8,
         RRP_bl = RRP * 1.44 + 8,
         ID = NULL
    ')or die(mysqli_error());
$affected = (int) (mysqli_affected_rows($cons))-1; 
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');

RRP 和 RRP_nl 和 RRP_bl 不在 csv 中,但我们是在插入之后计算出来的。

于 2017-02-17T07:34:54.957 回答
-1

没有办法在 mysql 中使用 load data 命令来做到这一点。数据必须在您的输入文件中。

如果您在 Linux 上,使用 sed 或类似工具将其他字段数据添加到输入文件中会很容易。

另一种选择是上传您的文件,然后运行查询以使用您想要的数据更新缺少的字段。

假设您要使用 mysql 用户名值,您还可以在表上设置触发器以在插入发生时填充这些字段。

于 2012-09-21T13:03:00.010 回答
-1
LOAD DATA Local INFILE 'name.csv' INTO TABLE table1 
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
    SET inserted_date=CURRENT_DATE(), inserted_by='me'
于 2016-08-08T20:59:50.037 回答