mysql数据的加载命令

LOAD DATA 是 MySQL 中一个非常强大且高效的命令,用于将外部文件中的数据快速加载到数据库表中。它特别适用于需要导入大量数据的情况,相比通过 INSERT 语句一条条插入数据,使用 LOAD DATA 可以显著提高效率。如果看的头大也弄不明白,可以看下面简单版本的介绍或者让AI给你解释。

基本语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
LOAD DATA [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[PARTITION (partition_name,...)]
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]

关键参数说明

  • LOCAL:如果指定了 LOCAL,则客户端程序会从本地文件系统读取文件,并将其发送到服务器端进行处理。否则,默认情况下,MySQL会尝试从服务器的文件系统读取文件。

  • INFILE 'file_name':指定要导入的数据文件路径。如果使用了 LOCAL,则该路径是相对于客户端的;否则,它是相对于服务器的。

  • REPLACE | IGNORE:决定如何处理重复键值的行。REPLACE 表示替换现有记录,而 IGNORE 则忽略导致唯一键冲突的行。

  • INTO TABLE tbl_name:指定目标表名。

  • FIELDSLINES 子句

    • TERMINATED BY 'string':定义字段或行结束符。
    • ENCLOSED BY 'char':定义字段值被哪个字符包围(如双引号)。
    • ESCAPED BY 'char':定义转义字符。
    • STARTING BY 'string':在每行开始前跳过的字符串(通常用于处理包含头信息的文件)。
  • IGNORE number LINES:跳过文件开头的若干行,通常用于跳过CSV文件的标题行。

  • (col_name_or_user_var,...):指定列的顺序,如果与文件中的列顺序不同,则需明确列出。

  • SET col_name = expr,...:允许在导入时对某些列应用表达式,比如计算默认值等。

示例

假设我们有一个名为 students_data.csv 的CSV文件,内容如下:

1
2
3
student_id,name,gender,age,class_name,score,email
S001,张三,男,18,高一1班,89.5,[email protected]
...

我们可以使用以下命令将数据导入到 school_db 数据库的 students 表中:

1
2
3
4
5
6
7
LOAD DATA LOCAL INFILE '/path/to/students_data.csv'
INTO TABLE students
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(student_id, name, gender, age, class_name, score, email);

注意事项

  1. 权限问题:确保MySQL用户有权限执行 LOAD DATA 操作。特别是当使用 LOCAL 选项时,可能需要调整客户端和服务器配置来允许这种操作。

  2. 文件路径:使用 LOCAL 时,路径是相对于客户端机器的;不使用 LOCAL 时,路径是相对于MySQL服务器的。

  3. 性能考虑:对于大规模数据导入,建议禁用索引和外键检查,待数据导入完成后再重新启用,这样可以大幅提升导入速度。

  4. 错误处理:理解 REPLACEIGNORE 的作用,根据实际情况选择合适的策略来处理重复键或其他错误情况。

通过合理配置 LOAD DATA 命令的各项参数,你可以高效地将大量数据导入MySQL数据库中,大大节省时间和精力。


如果你觉得看的头大,下面是简化版的 LOAD DATA 命令介绍,专注于最常用的选项和场景。

简化版 LOAD DATA 命令介绍

LOAD DATA 是 MySQL 中用于快速将外部文本文件(如 CSV 文件)的数据导入到数据库表中的命令。它特别适合于大批量数据的插入操作,比一行行使用 INSERT 语句效率要高得多。

基本语法

1
2
3
4
5
6
7
LOAD DATA [LOCAL] INFILE 'file_name'
INTO TABLE tbl_name
FIELDS TERMINATED BY 'string'
[OPTIONALLY] ENCLOSED BY 'char'
LINES TERMINATED BY 'string'
IGNORE number LINES
(column_list)
  • LOCAL:如果包含这个关键字,则表示从客户端本地读取文件。否则,默认从服务器端读取文件。
  • INFILE 'file_name':指定要导入的文件路径。如果是 LOCAL,则相对于客户端;否则相对于MySQL服务器。
  • INTO TABLE tbl_name:指定目标表名。
  • FIELDS TERMINATED BY 'string':定义字段之间的分隔符(对于CSV文件通常是逗号 ,)。
  • ENCLOSED BY 'char':定义包围字段值的字符(对于CSV文件通常是双引号 ")。
  • LINES TERMINATED BY 'string':定义行结束符(在Windows上可能是 \r\n,但在大多数情况下使用 \n 就足够了)。
  • IGNORE number LINES:跳过文件开头的若干行,通常用于跳过CSV文件的标题行。
  • (column_list):指定如何映射文件中的列到数据库表中的列。如果不指定,则默认按顺序对应。

示例

假设你有一个名为 students_data.csv 的文件,其内容如下:

1
2
3
student_id,name,gender,age,class_name,score,email
S001,张三,男,18,高一1班,89.5,[email protected]
...

你可以使用以下命令将其导入到 school_db 数据库的 students 表中:

1
2
3
4
5
6
LOAD DATA LOCAL INFILE 'D:/istore/students_data.csv'
INTO TABLE students
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

关键点说明

  • 路径格式:在 Windows 上使用navicat连接数据库,可以用'D:/istore/students_data.csv''D:\\istore\\students_data.csv'指明文件位置。在Linux中用命令行连接数据库的话,使用反斜杠 /,比如/root/students_data.csv

  • 处理重复记录:如果你希望更新已存在的记录而不是忽略它们,可以考虑使用 REPLACE INTO 而不是 INTO TABLE。例如:

    1
    2
    3
    LOAD DATA LOCAL INFILE 'D:/istore/students_data.csv'
    REPLACE INTO TABLE students
    ...
  • 确保权限:如果你使用 LOCAL 关键字,请确保你的 MySQL 客户端和服务器配置允许 LOCAL INFILE 操作。这可能需要在连接时加上参数或者调整配置文件。

通过这种方式,你可以高效地将大量数据导入到 MySQL 数据库中,而无需编写大量的 INSERT 语句。如果有任何疑问或操作中出现问题,请复制给AI或问老师!

[up主专用,视频内嵌代码贴在这]