最近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个文件,很智能,再使用命令行导入,这样就很简单了。

     全文完。