mysql LOAD DATA INFILE 与自增主键

16 投票
5 回答
25268 浏览
提问于 2025-04-15 22:02

我正在尝试通过“LOAD DATA LOCAL INFILE 'filename' INTO TABLE 'tablename'”这个命令把一个数据文件加载到mysql表中。

问题是,源数据文件里有所有字段的数据,但主键('id'列)缺失。我在创建数据库时添加了一个唯一的id字段,但现在我需要从下一个字段开始导入数据,并在导入时让id字段自动增加。

def create_table():
            cursor.execute ("""
                    CREATE TABLE variants
                    (
                    id integer(10) auto_increment primary key,
                    study_no CHAR(40),
                    other fields.....


                    )
                    """)

这是我的LOAD查询

query1= "LOAD DATA LOCAL INFILE '"+currentFile+"' INTO TABLE variants FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n'"

有什么想法吗?

总结: 创建一个额外的id字段,并让它自动增加 将数据(20列)加载到包含21个字段的表中,跳过id字段 让id字段自动填充,使用自动增加的索引。

5 个回答

2

你的数据文件应该像这样写:
空值, 学习字符, 其他字段...
MySQL会把空值替换成一个递增的ID。

3
LOAD DATA LOCAL INFILE '/var/www/.........../file.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\\r\\n' (field1,field2,.........,fieldn)

这是针对Ubuntu系统的情况。

22

指定列列表:

默认情况下,如果在LOAD DATA INFILE语句的末尾没有提供列列表,那么输入的每一行都需要包含表中每一列的数据。如果你只想加载表中的某些列,就需要指定一个列列表:

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

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

撰写回答