mysql数据库的导入

我们今天来聊聊往 MySQL 数据库里导入数据的事儿。这就像是把东西搬进一个大仓库,我们有两种常见的搬运方式:一种是用 SQL 文件,另一种是用 CSV 文件


SQL 文件:就像一份详细的“施工图纸”

咱们先说说 SQL 文件。SQL文件的内容主要sq由l语句组成,包括各种建表,删除表,插入记录,修改记录等等。你可以把 SQL 文件想象成一份特别详细的“施工图纸”或者一份“操作指令清单”。

这份清单里写得明明白白:

  • “先给我建一个叫‘学生’的表,表里要有‘学号’、‘姓名’、‘年龄’这些格子。”(这对应着 SQL 语句中的 CREATE TABLE
  • “然后,往‘学生’表里塞一条数据:学号001,名字叫张三,年龄18。”(这对应着 SQL 语句中的 INSERT INTO
  • “再塞一条数据:学号002,名字叫李四,年龄19。”
  • 甚至,它还可能写着:“把张三的年龄改成19。”(这对应着 UPDATE)或者“把李四的数据删掉。”(这对应着 DELETE

– 比如my_database_backup.sql 文件内容

1
2
3
4
5
6
7
8
9
10
11
CREATE DATABASE IF NOT EXISTS school;
USE school;

CREATE TABLE IF NOT EXISTS students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
age INT
);

INSERT INTO students (name, age) VALUES ('张三', 18);
INSERT INTO students (name, age) VALUES ('李四', 19);

特点:

  • 功能强大:SQL 文件不光能导数据,还能建表、修改表结构、更新数据、删除数据等等,功能非常全面。就像一个全能的工匠,什么活儿都能干。
  • 严谨精确:它遵循 SQL 语言的规则,每一步操作都清清楚楚,不会有歧义。
  • 专业性强:需要你懂一点 SQL 语言,才能看懂并编写它。

什么时候用?

当你需要完整地恢复一个数据库,包括它的结构和数据;或者需要执行一系列复杂的数据库操作时,SQL 文件就是你的不二之选。
没问题!咱们接着上节课的内容,今天咱们就来实际操作一下,看看怎么用命令行工具把数据导入到 MySQL 数据库里。这就好比有了“施工图纸”和“数据表格”,我们现在要学会怎么用工具把它们“搬运”到仓库里。


SQL 文件导入:用 mysql 命令执行“施工图纸”

SQL 文件导入是最直接的方式,就像你把一份详细的施工图纸交给工头,他照着图纸一步步执行就行。

咱们会用到 mysql 命令,这个命令就是连接到 MySQL 数据库并执行操作的工具。

基本语法:

1
mysql -u 用户名 -p 数据库名 < /路径/到/你的/文件名.sql

简单例子:

假设你有一个 SQL 文件叫 my_database_backup.sql,它位于 /home/teacher/ 目录下,里面包含了创建表和插入数据的指令,比如:

1
2
3
4
5
6
7
8
9
10
11
12
-- my_database_backup.sql 文件内容
CREATE DATABASE IF NOT EXISTS school;
USE school;

CREATE TABLE IF NOT EXISTS students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
age INT
);

INSERT INTO students (name, age) VALUES ('张三', 18);
INSERT INTO students (name, age) VALUES ('李四', 19);

现在,我们要把这个 SQL 文件导入到 MySQL 的 school 数据库中。假设你的 MySQL 用户名是 root

  1. 打开你的终端或命令提示符

  2. 输入以下命令,然后按回车键:

    1
    mysql -u root -p school < /home/teacher/my_database_backup.sql
  3. 系统会提示你输入密码 (Enter password:)。 输入你 MySQL root 用户的密码,然后按回车键。

发生了什么?

  • -u root:告诉 MySQL 你要用 root 用户登录。
  • -p:表示需要输入密码。
  • school:表示你要把数据导入到名为 school 的数据库中。如果 school 数据库不存在,并且 SQL 文件中有 CREATE DATABASE school; 这样的语句,它会自动创建。
  • <:这个符号很重要,它叫做“输入重定向”,意思是把 < 后面文件的内容作为输入,交给前面的 mysql 命令来执行。

执行成功后,你就可以登录到 MySQL 数据库,看看 school 数据库里是不是已经有了 students 表,并且里面有张三和李四的数据了。


CSV 文件:就像一份整洁的“表格数据”

接下来是 CSV 文件,这个就好理解多了。CSV 的全称是 “Comma Separated Values”,翻译过来就是“逗号分隔值”。你可以把它想象成我们平时用的 Excel 表格,只不过它更“朴素”一些。

CSV 文件里,数据都是一行一行的,每一行代表一条记录,而每条记录里的不同数据项之间,用 逗号 分开。

举个例子,一个记录学生信息的 CSV 文件可能长这样:

1
2
3
4
学号,姓名,年龄
001,张三,18
002,李四,19
003,王五,20

你看,第一行是标题(也就是我们表的列名),下面每一行就是一条条的数据。每条数据里的学号、姓名、年龄都是用逗号隔开的。

特点:

  • 简单直观:它就是纯粹的数据,不包含任何数据库操作指令,非常容易理解和编辑。就像是把数据整整齐齐地列出来。
  • 通用性好:很多软件都能生成和读取 CSV 文件,比如 Excel。这让数据交换变得非常方便。
  • 只包含数据:CSV 文件本身不包含表的结构信息,你需要先有对应的表,才能把数据导入进去。

什么时候用?

当你只想导入纯粹的数据到已经存在的表里,或者需要从其他系统导出数据再导入到 MySQL 中时,CSV 文件就显得非常便捷了。它就像是专门用来搬运“货品”的卡车,效率高,操作简单。


CSV 文件导入:用 LOAD DATA INFILE 命令导入“数据表格”

导入 CSV 文件稍微有点不同,因为它只是纯粹的数据,你需要告诉 MySQL 这些数据要放到哪个表的哪个字段里。

这里我们用 LOAD DATA INFILE 这个 SQL 语句来完成。

基本语法 (在 MySQL 客户端中执行):

你需要在连接到 MySQL 数据库之后,在 MySQL 的命令行界面里输入这个命令。

1
2
3
4
5
6
7
LOAD DATA INFILE '/路径/到/你的/文件名.csv'
INTO TABLE 表名
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS -- 如果 CSV 文件有标题行,就忽略第一行
(id,name,age); -- 对应 CSV 文件里的字段,如果全部列都对应导入,可忽略不用写。导入的数据只有一部分,按顺序写列名即可

简单例子:

假设你有一个 CSV 文件叫 student_data.csv,位于 /home/teacher/data/ 目录下,内容如下:

1
2
3
4
id,name,age
1,王五,20
2,赵六,21
3,钱七,22

并且你已经在 school 数据库中创建了一个 students 表(就像上面 SQL 文件例子中创建的那样)。

  1. 打开你的终端或命令提示符

  2. 登录到 MySQL 数据库:

    1
    mysql -u root -p

    输入密码后,你会进入 MySQL 命令行界面,提示符通常是 mysql>

  3. 选择要操作的数据库:

    1
    USE school;

    (按回车键)

  4. 执行 LOAD DATA INFILE 命令:

    1
    2
    3
    4
    5
    6
    LOAD DATA INFILE '/home/teacher/data/student_data.csv'
    INTO TABLE students
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS;

    (按回车键)

发生了什么?

  • LOAD DATA INFILE '/home/teacher/data/student_data.csv':指定要加载的 CSV 文件路径。
    • 注意: 为了安全考虑,MySQL 默认只允许从服务器本地的特定目录(或你的数据文件本身所在的目录)加载文件。如果你遇到权限问题,可能需要检查 MySQL 的 secure_file_priv 配置,或者把 CSV 文件放到 MySQL 服务器可以访问的目录。可将文件放在默认配置 /var/lib/mysql-files/目录中进行加载。
  • INTO TABLE students:告诉 MySQL 把数据导入到 students 表中。
  • FIELDS TERMINATED BY ',':说明 CSV 文件中,字段之间是用逗号 , 分隔的。
  • ENCLOSED BY '"':说明有些字段(比如包含逗号的字符串)可能用双引号 " 包裹起来,MySQL 会正确处理。
  • LINES TERMINATED BY '\n':说明每行数据都是以换行符 \n 结束的。
  • IGNORE 1 ROWS:因为我们的 student_data.csv 文件第一行是标题 id,name,age,这行不是数据,所以我们告诉 MySQL 忽略它。如果没有标题行,就不需要这句。

执行成功后,你就可以查询 students 表,看看王五、赵六、钱七的数据是不是都进去了。


小贴士:

  • 路径问题:文件路径一定要写对,包括文件名和扩展名。
  • 权限问题:MySQL 对文件导入有安全限制。如果你遇到错误,比如 ERROR 13 (HY000): Can't get stat of '/path/to/your/file.csv' (Errcode: 2),这通常是文件路径不对或者 MySQL 没有权限读取该文件。可将文件放在默认配置 /var/lib/mysql-files/目录中进行加载。
  • 编码问题:确保你的 SQL 文件和 CSV 文件编码与 MySQL 数据库的编码一致,避免出现乱码。通常推荐使用 UTF-8。

总结一下:

  • SQL 文件:是“施工图纸”,包含了建表、插数据、改数据等各种操作指令,功能强大但稍微复杂。
  • CSV 文件:是“数据表格”,只包含纯粹的数据,简单直观,适合大量数据的导入导出。
[up主专用,视频内嵌代码贴在这]