mysql - 将 CSV 导入到 MySQL,其列数少于目标表

标签 mysql mysql-workbench

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

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

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 忽略最后两列,不理会它们?

最佳答案

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

类似这样的事情。只需在括号之间按照正确的顺序填写实际的列名称,如果您不想使用 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

关于mysql - 将 CSV 导入到 MySQL,其列数少于目标表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15817295/

相关文章:

具有固定列数的 MySQL Pivot 数据

php - 无法弄清楚 MySQL ORDER BY

php - MySQL连接两行,两个表,具有相同的字段

mysql - 同一查询每次返回的记录数不同

mysql - 如何修复创建复合外键时的 'MySQL Error: 1822. Missing index for contraint'

带参数语法的 MySQL 过程

带参数的 MySQL LIMIT

mysql - 统计mysql中每天的出现次数

MySQL Workbench 无法在 Windows 上打开

mysql - 用两个不同的列加入同一个表 laravel