MySQL的load data infile

在MySQL中,我们经常需要将大量数据导入到数据库中。如果手动一条一条地插入数据,效率会非常低下。为了解决这个问题,MySQL提供了一个非常方便的工具和语法,即"load data infile"。通过该语法,我们可以将数据从文件中快速地导入到MySQL数据库中。

什么是load data infile

"load data infile"是MySQL的一个用于导入数据的命令。它允许我们从一个文本文件中读取数据,并将其插入到指定的表中。

load data infile的语法

load data infile语法如下所示:

load data infile '文件路径'
into table 表名
[character set 字符集]
[fields
  [terminated by '分隔符']
  [enclosed by '引号']
  [escaped by '转义符']
]
[lines
  [starting by '行起始符']
  [terminated by '行结束符']
]
[ignore number lines]
(column1, column2, ...)

其中,方括号内的内容表示可选项。

  • 文件路径:指定要导入的文件路径。
  • 表名:指定要导入数据的目标表名。
  • character set 字符集:指定文件的字符集,如果不指定,默认使用数据库的字符集。
  • fields:指定字段的分隔符、引号和转义符。
    • terminated by '分隔符':指定字段的分隔符,默认为制表符。
    • enclosed by '引号':指定字段的引号,默认为空。
    • escaped by '转义符':指定字段的转义符,默认为反斜杠。
  • lines:指定行的起始符和结束符。
    • starting by '行起始符':指定行的起始符,默认为空。
    • terminated by '行结束符':指定行的结束符,默认为换行符。
  • ignore number lines:忽略文件的前几行。
  • (column1, column2, ...):指定要导入的字段,如果不指定,默认导入所有字段。

load data infile的使用

首先,我们需要准备一个文本文件,该文件包含要导入的数据,每行表示一条记录,字段之间使用指定的分隔符分隔。

假设我们有一个名为"students"的表,该表包含"姓名"和"年龄"两个字段。我们的文本文件如下所示:

Jim,18
Lily,20
Tom,22

现在,我们可以使用"load data infile"将这些数据导入到"students"表中:

load data infile '/path/to/file.txt'
into table students
fields terminated by ','

上述语句将会将文本文件中的数据插入到"students"表中。

字段的分隔符

在上面的示例中,我们使用逗号作为字段的分隔符,通过fields terminated by ','来指定。如果文本文件中的字段使用的是其他分隔符,比如制表符,我们可以使用fields terminated by '\t'来指定。

忽略文件的前几行

有时,文件的开头几行可能是文件的注释或者其他无效数据,我们可以通过ignore number lines来忽略这些行。

例如,我们的文本文件的前两行是注释,我们可以使用以下语句来导入数据:

load data infile '/path/to/file.txt'
into table students
fields terminated by ','
ignore 2 lines

指定要导入的字段

如果文本文件中的字段顺序和目标表的字段顺序不一致,或者只需要导入部分字段,我们可以通过指定要导入的字段来解决。

假设我们的文本文件的字段顺序是"年龄, 姓名",我们可以使用以下语句来导入数据:

load data infile '/path/to/file.txt'
into table students
fields terminated by ','
(@age, @name)
set age = @age, name = @name

上述语句中,我们使用(@age, @name)来指定文本文件中的字段顺序,然后使用set age = @age, name = @name将字段