工作中经常有需要导入SQL文件的需求,常用的工具例如Navicat都是支持导入SQL文件的,但是如果没有工具的情况下,我们也可以通过命令来导入,主要有一下几种方式。

mysql命令导入

root为用户名,backup.sql是要导入的数据库文件,test代表导入的目标数据库。

mysql -uroot -p < ~/backup.sql test

source命令导入

这种方式需要先登录数据库,然后进行导入。

# 没有事先指定数据库
msyql> source ~/backup.sql test;
# 事先指定数据库
msyql> use test;
msyql> source ~/backup.sql;

此外还有两种方式,使用LOAD DATA导入数据和使用mysqlimport命令导入数据,因为命令比较复杂这里不做过多介绍,感兴趣的小伙伴可以自行搜索学习。

2020-11-19更新:
今天看到MySQL导入数据使用CSV比执行SQL效率高的问题,俺突然就想到了这篇文章,补充一下LOAD DATA的用法。

使用LOAD DATA导入大量数据的时候会比SQL效率高很多,LOAD DATA语句用于高速的从一个文本文件中读取数据,装在到一个表中。

CSV为逗号分隔值文件,存储的数据一般以逗号分隔,也有使用制表符的,本质是是一个纯文本文件,如果你使用微软的Office套件,可以用Excel打开CSV文件,Excel文件也可以方便的转存为CSV文件。

使用LOAD DATA从文本文件导入数据的方式如下:

mysql> LOAD DATA INFILE './datafile.csv' INTO TABLE users
    -> FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"'
    -> LINES TERMINATED BY '\r\n';

数据文件名为datafile.csv,表名为users,分隔符为,,换行符为\r\n,这些都可以根据实际文件做相应的更改。

CSV文件最好使用ANSI编码格式

另外如果导入的文件中包含中文,则还需要在上面的命令中添加相应的字符编码格式:

mysql> LOAD DATA INFILE './datafile.csv'
    -> INTO TABLE users CHARACTERR SET GB2312
    -> FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"'
    -> LINES TERMINATED BY '\r\n';
最后修改:2020 年 11 月 19 日 03 : 30 PM