使用比目标表少的列将CSV导入MySQL

时间:2013-04-04 17:00:26

标签: mysql mysql-workbench

有没有办法将CSV导入到列号不匹配的MySQL中?

我有一个MySQL“员工”表,我们每月用CSV文件更新一次。我在“Employees”表中添加了两个与我们需求相关的附加列。使用以下SQL语句通过MySQL Workbench导入表数据:

LOAD DATA LOCAL INFILE 'EmployeeDump-March.csv' REPLACE INTO TABLE employees
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

我收到以下错误,这是绝对正确的......列号不匹配:

Error Code: 1261. Row 1 doesn't contain data for all columns    7.426 sec

两个额外字段具有默认值。

有没有办法来解决这个错误并让MySQL忽略最后两列,只留下它们?

1 个答案:

答案 0 :(得分:3)

您可以(并且应该!)使用LOAD DATA INFILE明确命名要插入的列,就像常规INSERT一样。您还可以选择为LOAD DATA INFILE语句中添加的两个新列设置默认值。

像这样的东西。只需在parens之间以正确的顺序填写实际的列名,如果不想要NULL,则设置新列的实际默认值和列名:

LOAD DATA LOCAL INFILE 'EmployeeDump-March.csv' REPLACE INTO TABLE employees
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(old_column1, old_column2, ...)
set new_column1 = NULL,
  new_column2 = NULL