工作中经常有需要导入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';