【MySQL学习】select..into..outfile

select * from school.score into outfile 'c:/fp';//注意路径一定是/

在这里插入图片描述
大概的意思是,我们需要设置--secure-file-priv变量,才能够访问存放目录。那么为啥要这样呢?上一节,我们知道mysqldump是可以指定存放目录来,为啥select ...into...outfile不行呢?首先我们看看这两个命令运行时的区别,mysqldump是没有登陆mysql,直接使用cmd等工具执行的,而select ...into...outfile是登陆mysql成功后,执行的命令,这里区别是什么呢?答案就是用户,执行mysqldump的cmd的操作者肯定是当前计算机用户,而执行select ...into...outfile的命令是mysql程序在执行,而mysql程序在本计算机就是一个虚拟用户,当我们需要运行MySQL数据库时,可以创建一个虚拟用户,作为运行MySQL服务的角色。既然是虚拟用户当然不能让它随意在计算机上上传下载文件,就要把它限制在某个文件夹内,当然该文件夹需要允许虚拟用户读写才行。

 show global variables like '%secure_file_priv%';
  • NULL,表示禁止。

  • 如果value值有文件夹目录,则表示只允许该目录下文件(PS:测试子目录也不行)。

  • 如果为空,则表示不限制目录。

 set global secure_file_priv='';

在这里插入图片描述
该变量是只读的,不能通过命令更新,只能修改my.ini配置文件,该文件的位置可以通过services.msc命令打开服务找到mysql,右键选择属性,弹出窗口
在这里插入图片描述

secure-file-priv=""

在这里插入图片描述
重启mysql,我们看到变量已经更新了。
在这里插入图片描述

结构数据单表分离

mysqldump也可以使用–tab参数结构数据分离,本质上是使用select...into...outfile

mysqldump -uroot -p --tab=C:\Users\**\Desktop ccp product

在这里插入图片描述
这是因为在该文件夹下没有写的权限,这是因为执行mysqldump命令的是当前用户,但是select into outfilemysql程序用户来操作,所以就没有权限,把输出的地址换一个有权限的。

mysqldump -uroot -p123456 --tab=C:\fp\ school score

在这里插入图片描述
如果不加表名,那么将会把数据库school中的所有表都导出为两个文件,一个结构文件,一个数据文件

mysqldump -uroot -p123456 --tab=C:\fp\ school
mysqldump -uroot -p123456 --tab=C:\fp\ school
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值