【问题标题】:MySQL - Multiple set on LOAD DATA INFILEMySQL - 在 LOAD DATA INFILE 上设置多个
【发布时间】:2012-09-13 21:39:20
【问题描述】:

我有一个这样的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

【问题讨论】:

    标签: mysql csv load


    【解决方案1】:

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

    如果您使用的是 Linux,使用 sed 或类似工具将额外的字段数据添加到您的输入文件中会很容易。

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

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

    【讨论】:

      【解决方案2】:

      我不明白您的表中是否已经存在列 inserted_dateinserted_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'
      

      【讨论】:

        【解决方案3】:

        这样就可以了:

        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

        【讨论】:

          【解决方案4】:
          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'
          

          【讨论】:

          • 这与这个问题已经发布了 4 年的答案有何不同?它不会增加任何价值。
          • 这是一个不同的答案。这个使用LOAD DATA Local INFILE 而不仅仅是LOAD DATA INFILE
          【解决方案5】:

          在数据库中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 中,但我们是在插入之后计算出来的。

          【讨论】:

          • 请添加更多描述和/或有关您的答案以及它如何解决所问问题的信息,以便其他人可以轻松理解它而无需要求澄清
          猜你喜欢
          • 2012-10-05
          • 2010-11-17
          • 1970-01-01
          • 1970-01-01
          • 2017-07-21
          • 2012-06-01
          • 2011-09-01
          • 1970-01-01
          相关资源
          最近更新 更多