最近QQ上有人问Mysql中怎么导出数据,顺便温习了下Mysql的导入操作,而是有了本篇博文,本博文的内容很基础。
先说明,我的Mysql版本是5.6.14,查看Mysql版本sql为:
select version();
我的示例数据库为test。
为了节省你的时间,我先写总结。
--导出数据库(创建数据库,表,数据) mysqldump -uroot -p test --databases --default-character-set=utf8>f:/saveFile/out_all_utf_db.sql
直接在cmd命令行下运行即可,我的数据库编码设置是utf8,所以默认的编码是utf8,如果你的是gbk,请改成gbk,--default-character-set=utf8这行不写也行,不影响。
--databases 作用是在文件中添加数据库的创建语句。
如果不想要创建数据库,可以这样写。
--导出数据库(表,数据) mysqldump -uroot -p test --default-character-set=utf8>f:/saveFile/out_with_utf8_db.sql mysqldump -uroot -p test --default-character-set=gbk>f:/saveFile/out_with_gbk_db.sql
上面的导出包含表创建语句,以及数据插入,如果只想要创建数据库和表,可以这样写。
--导出数据库(创建数据库,表) mysqldump -uroot -p -d test --databases --add-drop-table --default-character-set=utf8>f:/saveFile/out_with_db_table_db.sql
如果只想要创建表,可以这样写:
--导出数据库(表) mysqldump -uroot -p -d test --add-drop-table --default-character-set=utf8>f:/saveFile/out_with_table_db.sql
如只想要表的数据,可以这样:
--导出数据库(表数据) mysqldump -uroot -p -t test --default-character-set=utf8>f:/saveFile/out_with_data_only_db.sql
上面是导出数据库的整个表,插入语句中有以下内容:
LOCK TABLES `user_t3` WRITE; insert into..... UNLOCK TABLES;
如果不想要lock表,可以这样:
--导出数据库(表数据,无Lock) mysqldump -uroot -p -t test --add-locks=false --default-character-set=utf8>f:/saveFile/out_with_data_only_on_lock_db.sql
导出单个表和上面的类似,如下:
--导出单个表 mysqldump -uroot -p test user_t3 --default-character-set=utf8>f:/saveFile/out_user_data.sql
如果想一次导出多个表,表名请用空格隔开
--导出多个表 mysqldump -uroot -p test user_t2 user_t3 --default-character-set=utf8>f:/saveFile/out_user2_data.sql
导出表结构:
--导出表结构 mysqldump -uroot -p -d test user_t3 --add-drop-table --default-character-set=utf8>f:/saveFile/out_user_no_data.sql
导出表数据:
--导出表数据 mysqldump -uroot -p -t test user_t3 --default-character-set=utf8>f:/saveFile/out_user_only_data.sql
导出表数据,不含Lock语句
--导出表数据 无Lock mysqldump -uroot -p -t test user_t3 --add-locks=false --default-character-set=utf8>f:/saveFile/out_user_no_lock_data.sql
怎么导入呢?
方法1直接在cmd下运行:
--导入 mysql -h localhost -u root -p test_tmp <f:/saveFile/out_user_data.sql
方法2,先登录Mysql
--要登录 use test_tmp; source f:/saveFile/out_user_data.sql
重要部分已经写完,下面的内容不是很重要,可以选择忽略。
1--databases只能用在导出整个数据库上面,不能用在导出单个或多个表上面。
2 指定文件编码可以使用default-character-set参数,值可以为utf8,gbk。
3取消Lock信息使用--add-locks=false。
4如果想在导出的sql中自动提交,可以使用--no-autocommit。使用之后,导出的sql文件中将有如下内容:
set autocommit=0; INSERT INTO.... commit;
5导出表结构使用-d --add-drop-table,-d意思是no data,add-drop-table意思是在上drop table语句,我的是默认有的。
6只导出数据,可以使用--no-create-info或者-t参数。
7mysqldump中各个参数可以叠加,一次可以使用多个。
最后如果不确定如何使用,请使用
mysqldump --help
查看个参数的具体意思,我就是使用以上语句才写这篇博文的。
如只想要数据,不想要任何sql语句,可以这样:
select * from user_t3 into outfile "f:/saveFile/test_load.sql"
导入可以这样:
load data infile "f:/saveFile/test_load.sql" into table user_t3;
详情请自行搜索load 命令使用。
另一个导入导出的方法是使用图形工具,Oracle可以使用sql/plus,Mysql可以使用Navicat Premium,图形界面用起来很简单的,可以从Excel文件中导入,很方便。
最后啰嗦一句,如果你的sql文件较大,个人推荐使用命令行,再推荐大家使用一个sql文件切割工具,SQLDumpSplitter,可以指定文件切割的大小,不会把一条sql切割到2个文件,很智能,再使用命令行导入,这样就很简单了。
全文完。