【问题标题】:SQL LOAD DATA INFILE questionSQL LOAD DATA INFILE 问题
【发布时间】:2011-03-09 16:17:18
【问题描述】:

如何让 LOAD DATA INFILE 命令跳过某些字段。

假设我有下表:

CREATE TABLE stuff (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL,
    name CHAR(64) NOT NULL,
    junk CHAR(64) NOT NULL,
    a ENUM('N','Y') NOT NULL DEFAULT 'N',
    PRIMARY KEY (id)
);

还有我的文件:

,name1,junk1,
,name2,junk2,
,name3,junk3,Y

声明:

LOAD DATA INFILE 'myfile' INTO TABLE stuff FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

自动跳过自动增量并正确处理?它似乎可以正确处理所有事情,但这会产生以下警告:

Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 1
Warning (Code 1265): Data truncated for column 'a' at row 1
Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 2
Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 3
Warning (Code 1265): Data truncated for column 'a' at row 3
Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 4

去掉开头的逗号并不能正确输入数据。

【问题讨论】:

    标签: mysql sql auto-increment load-data-infile


    【解决方案1】:

    您可以将 id 显式设置为 NULL,以便它使用自动增量值。

    LOAD DATA INFILE 'myfile' 
    INTO TABLE stuff 
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\n'
    SET id = NULL;
    

    我还建议删除第一个逗号并明确列出文件中的列:

    LOAD DATA INFILE 'myfile' 
    INTO TABLE stuff 
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\n'
    (name,junk,a)
    SET id = NULL;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 2014-01-31
      • 2011-10-24
      • 2021-02-02
      • 2014-02-18
      相关资源
      最近更新 更多