【问题标题】:MySQL - Import .CSV/Excel file into MySQLMySQL - 将 .CSV/Excel 文件导入 MySQL
【发布时间】:2014-09-16 01:08:54
【问题描述】:

当我想导入 csv/excel 文件但我希望内容位于特定列中时该怎么做?

我的数据库中有 6 列。我们就叫它a、b、c、d、e、f吧。

我想从 excel 文件中向 c、d、e 中插入内容。 a、b、f列的内容会自动生成。

我正在使用 LOAD DATA INFILE 脚本。

【问题讨论】:

    标签: mysql import


    【解决方案1】:

    一种选择是将用户定义的变量指定为字段的目标,以代替 LOAD DATA 语句末尾的列列表中的列名。

    例如(省略大部分语法):

    LOAD DATA ... 
    ...     
    (@dummy1, @dummy2, c, d, e, @dummy3)
    

    一行中的第一个字段将分配给用户定义变量@dummy1,第二个字段分配给另一个用户定义变量,第三、第四和第五个字段将分配给c、d和e列(分别),第六个字段将被分配给另一个用户定义的变量。

    如果要为作为表达式结果的列提供值,可以使用 SET 子句...

    LOAD DATA ... 
    ...     
    (@a, @b, c, d, e, @dummy3) 
    SET a = UPPER(@a) 
      , b = STR_TO_DATE(@b,'%m/%d/%Y')
      , f = CONCAT(@a,@b)
    

    更新

    如果您在 csv 中只有三个字段,并且您想将第一个字段分配给列 c,将第二个字段值分配给列 d,并将第三个字段值分配给列 e...

    LOAD DATA ...
    ...
    (c, d, e)
    

    (col_or_user_var,...) 列表中列名的位置决定了将哪个字段值分配给哪个列。要“跳过”一个字段,请将其分配给用户定义的变量...文件中的字段必须分配给某些内容,如果您不想将其分配给列,请将其分配给用户定义的变量。

    您的问题不清楚文件中有多少字段,以及应将哪个字段分配给哪一列。

    【讨论】:

    • 会影响csv的结构吗?我已经阅读了 SET 部分,但我认为它可能会破坏数据库。 csv/excel 包含需要插入到 c、d、e 中的 3 列。它可能会将其插入 a、b 和 c,然后 SET 部分会将自动生成的值放在 a 和 b 中,这使得 c 成为唯一可用的部分。如果我错了,请纠正我:)
    • 你不需要使用 SET 子句;这完全是可选的。行中的每个字段都将分配给列列列表中的用户定义变量,在相应的位置。如果您不需要第一个字段中的任何值,只需将其分配给用户定义的变量……瞧,该字段值就消失了。 (第一个示例等效于 INSERT INTO mytable (c,d,e)。表中未引用的任何列都将被分配为该列定义的 DEFAULT。(SET 子句使您可以访问分配给 var 的字段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    相关资源
    最近更新 更多