数据导出
Navicat里面导出数据表
导出全部表
只是导出这个数据库里面的全部表,sql脚本里面没有写create 数据库,导入的时候都是要新建数据库
右键数据库——转储SQL文件
导出单表
命令行导出SQL脚本(全备)
我的电脑把mysql下的bin目录设置为了环境变量,可以直接在cmd里面输入
mysqldump -u 用户名 -p 数据库名 [表名] [>导出文件路径]
导出的sql脚本包括结构和数据 多个数据库导出可以用空格隔开
SQL语句导出数据到文件
select * from students
into outfile 'D:\\mysql\\database\\students.csv' #导出路径,双反斜杠,不能转义
[character set 'gbk'] #设置编码
[fields terminated by ','] #文件模板用逗号分隔数据,这里的值是字符串
[enclosed by '"'] #很多数据源的开始结尾都带有双引号,这个就是无视双引号,这里填的是字符
[lines terminated by '\n'] #换行的模板是\n转义,这里不能双反斜杠,这里要转义
into outfile:导出路径,要用双反斜杠。没有指定目录,默认的目录就在mysql安装目录下的data文件夹下面 character set:设置编码,字符串,关于编码字符串正确的写法,用Navicat鼠标新建数据库,有编码选择,选项里面怎么写的就怎么写。excel用的是gbk编码,如果用utf8,乱码 fields terminated by:数据的模板,表示列之间的数据用什么字符串隔开隔开,一般用逗号,一般都能识别,这里的值是一个字符串 enclosed by:无视某些符号,这里填的是字符 lines terminated by:换行的模板,用什么字符串换行
添加表头
因为into outfile只是导出数据,并不会导出表结构,所以没有表头
用以下的写法可以导出数据的情况下还有表头
select * from (select 'id','姓名','性别','生日','成绩' union select std_id,std_name,std_sexid,std_birthday,std_score from students) as S
into outfile 'D:\\mysql\\database\\students2.csv'
character set 'gbk'
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
思路:通过union把两个查询的结果连接起来,比如A表查出来3条数据,B表查出来8条数据,用union把这两个select连接起来,最后就是11条数据。 select ‘id’,’姓名’,’性别’,’生日’,’成绩’ 没有from,查的全是字符串,能查出来一行 后面再查学生表,把每一个字段单独写出来,和上面的纯查字符串一一对应。两个查询结果叠加起来称为一个新的查询结果,也可以算作一个临时的表,一定要给这个表取个别名。然后select这个临时表,最后导出的结果,第一行就是表头
可能会报以下错误
通过报错的提示可以发现是由于secure-file-priv变量的设置所引起的,查看该变量的设置
说明:
- secure_file_prive=null 限制mysqld 不允许导入导出
- secure_file_priv=/var/lib/mysql-files/ 限制mysqld的导入导出只能发生在/var/lib/mysql-files/目录下
- secure_file_priv=’ ‘ 不对mysqld的导入导出做限制
解决办法:
windows下在mysql的安装目录的my.ini文件 [mysqld]节点 下添加
secure_file_priv=''
,然后重启mysql服务。我的电脑右键——管理——服务和应用程序——服务linux下 在 /etc/my.cnf中添加
secure_file_priv=''
。
数据导入
Navicat里面导入数据
SQL语句本地数据文件导入
从本地文件把数据导入数据库,据说比insert快得多
load data local infile 'D:\\mysql\\database\\students2.csv' #数据文件路径
[ignore] into table new_students #这个表结构需要自己建立
[character set 'gbk'] #源数据是什么编码,导入数据库表就要用什么编码
[fields terminated by ',']
[enclosed by '"']
[lines terminated by '\n' ] #这里不能双反斜杠,这里要转义
[ignore 1 lines] #忽略第一行,有时候第一样是表头,插入数据时不能把源数据的表头插入了
ignore:忽略插入的报错,比如有些主键只能是唯一值,但是插入的数据重复了,会报错。不加ignore就会从报错这里开始停止导入数据,加了就忽略报错的这条数据,继续插入下面的数据
执行会报的错误:
涉及到数据库安全的问题,本地导入文件的参数没有打开。
查询到本地文件导入是关着的
解决办法:
windows下在mysql的安装目录的my.ini文件 [mysqld]节点 下添加
local_infile=1
,然后重启mysql服务。我的电脑右键——管理——服务和应用程序——服务
命令行导入SQL脚本
- 先在命令行登录mysql
- 然后还要选择使用哪个数据库,没有就自己建立一个
- 执行sql脚本
source 文件路径