将另一个表导入数据库并添加字段

时间:2016-07-13 03:24:00

标签: mysql sql csv sequelpro

我有一个csv文件,我希望将其导入到我的数据库中。但是,csv文件中的列与我要将其导入的表中的列不匹配。我想做两件事:

  1. 导入表格,但只导入部分列
  2. 为我导入的表没有的列提供默认值。
  3. 我希望我解释得这么好。不太确定如何为这个问题添加任何“代码”,但我已经添加了一些图像。

    这是我现有的表格:

    Columns in existing table

    以下是我要导入的csv文件的列

    enter image description here

    我想以某种方式仅将此csv文件的名称(作为标题),slug和created_at,updated_at导入到我的表中。另外,我希望自动添加ID,默认情况下将'exam_id'和'热门'布尔值设置为0。

1 个答案:

答案 0 :(得分:0)

LOAD DATA INFILE就是您所需要的。

请仔细阅读:http://dev.mysql.com/doc/refman/5.7/en/load-data.html

最有趣的部分是:

  

默认情况下,LOAD末尾没有提供列表   DATA INFILE语句,输入行应包含一个字段   每个表格列。如果您只想加载某些表的列,   指定列列表:

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata
(col1,col2,...);
  

如果中的字段顺序,您还必须指定列列表   输入文件与表中列的顺序不同。   否则,MySQL无法告诉如何将输入字段与表匹配   列。

     

列列表可以包含列名称或用户变量。   使用用户变量,SET子句使您可以执行   在将结果分配给它们之前转换它们的值   列。

     

SET子句中的用户变量可以通过多种方式使用。该   以下示例直接使用第一个输入列作为值   t1.column1,并将第二个输入列分配给用户变量   在用于之前进行分割操作   t1.column2的值:

LOAD DATA INFILE 'file.txt'   INTO TABLE t1   (column1, @var1)   SET
column2 = @var1/100;
  

SET子句可用于提供非来自输入的值   文件。以下语句将column3设置为当前日期和   时间:

LOAD DATA INFILE 'file.txt'   INTO TABLE t1   (column1, column2)   SET
column3 = CURRENT_TIMESTAMP;
  

您还可以通过将输入值分配给用户变量来丢弃输入值   而不是将变量分配给表列:

LOAD DATA INFILE 'file.txt'   INTO TABLE t1   (column1, @dummy,
column2, @dummy, column3);