bcp out 带列名导出_从零开始学习 MySQL 系列索引、视图、导入和导出

阅读本文大概需要 8 分钟

ab96b09248ccbe43832eeeaf5e51f598.png

前言上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识。作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会了解,尤其是关于索引的内容,学会建立恰当的索引可以大大提高数据库的查询效率,后续会深入拓展相关知识,敬请关注呀~(想看看周末还有多少爱学习的小伙伴,你们在哪里呀,O(∩_∩)O哈哈~)1、目录
  • 索引

  • 视图

  • 导入

  • 导出

2、步骤

在正式开始本实验内容之前,需要先下载相关代码。

该代码可以新建一个数据库,名为 mysql_shiyan ,并在 mysql_shiyan 数据库中建 4 个表(department,employee,project,table_1),然后向其中插入数据。

其中创建数据库和数据表语句可以在这里下载。

git clone https://github.com/rongweihe/MoreThanCode/tree/master/mysql_shiyan/SQL;
下载完成后,输入命令开启 MySQL 服务并使用 root 用户登录:
#打开 MySQL 服务sudo service mysql start#使用 root 用户登录mysql -u root
下载的 SQL6 目录下,有两个文件 MySQL-06.sql 和 in.txt,其中第一个文件用于创建数据库并向其中插入数据,第二个文件用于测试数据导入功能。
如果之前的数据库还存在,首先把 mysql_shiyan 数据库删掉,执行命令:
source /home/MySQL_05_01.sql;
输入命令运行第一个文件,搭建数据库并插入数据:
mysql> source /home/mysql_sql/SQL6/MySQL-06.sql;

3、索引

索引是一种可以提高数据库检索速度的一种数据结构。它的作用相当于一本书的目录,可以根据目录中的页码快速找到需要的内容。

当表中有大量记录的时候,若需要对表进行查询,没有索引的情况下,走的是全表搜索;将所有记录一一取出,和查询条件进行对比,然后返回满足条件的记录。

这样的方式会执行大量磁盘 I/O 操作,并花费大量数据库系统的时间。

而如果在表中已经建立索引,在索引中找到符合查询条件的索引值,通过索引值就可以快速找到表中的数据,可以大大地加快查询的速度

对一张表中的某个列建立索引,有以下两种语句格式:

ALTER TABLE 表名字 ADD INDEX 索引名 (列名);CREATE INDEX 索引名 ON 表名字 (列名);

我们用这两种语句分别建立索引:

ALTER TABLE employee ADD INDEX idx_id (id);  #在employee表的id列上建立名为idx_id的索引CREATE INDEX idx_name ON employee (name);   #在employee表的name列上建立名为idx_name的索引

索引的效果是加快查询速度,当表中数据不够多的时候是感受不出它的效果的。这里我们使用命令 SHOW INDEX FROM 表名字; 查看刚才新建的索引:

ecdd2216c09acb3191acc61a173dce8a.png

在使用 SELECT 语句查询的时候,语句中 WHERE 里面的条件,会自动判断有没有可用的索引。

比如有一个用户表,它拥有用户名(username)和个人签名(note)两个字段。其中用户名具有唯一性,并且格式有一定的限制,我们给用户名加上一个唯一索引;个性签名格式多变,而且允许不同用户使用重复的签名,不加任何索引。

这时候,如果要查找某一用户,使用语句

 select * from user where username=? 和 select * from user where note=? 

性能是有很大差距的,对建立了索引的用户名进行条件查询会比没有索引的个性签名条件查询快几倍,在数据量大的时候,这个差距会更大。

但是也要注意:一些字段不适合创建索引,比如性别,这个字段存在大量的重复记录,索引带来的效率在这里就不太合适,甚至会拖累数据库,导致数据冗余和额外的 CPU 开销。

具体原因涉及到聚集索引和非聚集索引,我们后面在深入展开。

比如下面的例子:可以看到相同的 sql,加索引之后比不加索引慢许多。

7d92794310a0ec360667a2b9e41c84d1.png

4、视图

视图是从一个或多个表中导出来的表,是一种虚拟存在的表。它就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样,用户可以视图是从一个或多个表中导出来的表,是一种虚拟存在的表。

它就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样,用户可以不用看到整个数据库中的数据,而只关心对自己有用的数据。

注意理解视图是虚拟的表:

  • 数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中;

  • 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据;

  • 视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变;

  • 在使用视图的时候,可以把它当作一张表。

创建视图的语句格式为:

CREATE VIEW 视图名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;

可见创建视图的语句,后半句是一个 SELECT 查询语句,所以视图也可以建立在多张表上,只需在 SELECT 语句中使用子查询或连接查询。

现在我们创建一个简单的视图,名为 v_emp,包含 v_name,v_age,v_phone 三个列:

CREATE VIEW v_emp (v_name,v_age,v_phone) AS SELECT name,age,phone FROM employee;
01b3de566c85b2f40c04792ef63b0cec.png

5、导入

我们来学习一下,如何导入一个纯数据文件,该文件中将包含与数据表字段相对应的多条数据,这样可以快速导入大量数据,除此之外,还有可以用 SQL 语句的导入方式,语法为:source *.sql 这是实验中经常用到的。

两者之间的不同是:数据文件导入方式只包含数据,导入规则由数据库系统完成;SQL 文件导入相当于执行该文件中包含的 SQL 语句,可以实现多种操作,包括删除,更新,新增,甚至对数据库的重建。

数据文件导入,可以把一个文件里的数据保存进一张表。

导入语句格式为:

LOAD DATA INFILE '文件路径和文件名' INTO TABLE 表名字;

现在 SQL6 目录下有一个名为 in.txt 的文件,我们尝试把这个文件中的数据导入数据库 mysql_shiyan 的 employee 表中。

由于导入导出大量数据都属于敏感操作,根据 mysql 的安全策略,导入导出的文件都必须在指定的路径下进行,在 mysql 终端中查看路径变量:(我这里设置了任意目录可以导入)

25efef1a1d352511293d3c3fccc58a96.png

注意到 secure_file_priv 变量指定安全路径 ,要导入数据文件,需要将该文件移动到安全路径下。

secure-file-priv 参数是用来限制mysql导入导出到哪个目录的。

查阅官方文档找到secure-file-priv的值有以下几种情况:

25b58296f00f15d020b338fbb0c54713.png

使用命令 vim SQL6/in.txt 查看 in.txt 文件中的内容:

e335495afc1014dfe0cd57bece030704.png

可以看到其中仅仅包含了数据本身,没有任何的 SQL 语句
再使用以下命令以 root 用户登录数据库,再连接 mysql_shiyan 数据库:
查看一下没有导入数据之前,employee 表中的数。

4235ebd138c1cdbf7820e150846476fb.png

现在执行导入语句,文件中的数据成功导入 employee 表:

eb3990cc4909be7e1310eeaeeba4e94c.png

6、导出

导出与导入是相反的过程,是把数据库某个表中的数据保存到一个文件之中。导出语句基本格式为:

SELECT 列1,列2 INTO OUTFILE '文件路径和文件名' FROM 表名字;

注意:语句中 “文件路径” 之下不能已经有同名文件。

如果导出报错,可能是 MySQL 没有权限对相应目录进行操作, 查看系统变量 tmpdir, 如下所示,tmpdir 变量指定路径为 /tmp。

2406cb7d01b768b62948b02757600afd.png

现在我们把整个 employee 表的数据导出到 /var/tmp/mysql-files/ 目录下,导出文件命名为 out.txt 具体语句为:

SELECT * INTO OUTFILE '/var/tmp/mysql-files/out.txt' FROM employee;

用 vim 可以查看导出文件 /var/tmp/mysql-files/out.txt 的内容:也可以使用 sudo cat /var/tmp/mysql-files/out.txt 命令查看。

5331119985a4adbffa53c9721a02d8ff.png

数据导出成功。

7、总结

在本节实验中我们学习了索引、视图、导入和导出的知识。

今天的学习就到这里啦。

如果各位老铁感觉写的不错,欢迎点在看、留言哦。

祝大家周末愉快~

PS:如果大家在阅读的过程中,有什么建议和看法,非常欢迎在下方留言,每个留言我都会认真看的00a0db9bc8145e1db32fe8ad9827697b.png

参考:

https://www.shiyanlou.com/courses/9

— 【 THE END 】—本公众号全部博文已整理成一个目录,请在公众号里回复「m」获取!

3T技术资源大放送!包括但不限于:Java、C/C++,Linux,Python,大数据,人工智能等等。在公众号内回复「1024」,即可免费获取!!

831653c7e76e18ccb186706194f96cd8.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四年级计算机课程,信息技术(四年级)全部课程PPT课件.ppt

信息技术(四年级)全部课程PPT课件调整窗口的大小 最小化 最大化 关闭 水平的双向箭头可以调整窗口的宽度,让窗口变宽或变窄。 调整窗口的大小 最小化 最大化 关闭 倾斜的双向箭头可同时调整窗口的高和宽。 做一做 打开我的文档,对窗口进行最小化、最大化…

python等腰梯形_简单空实心图形打印|Python练习系列[3]

def shape_print(n): #实心等腰三角形 for y in range(n): for x in range(n-y-1):#先循环打印空格 形成一个倒直角三角形 range()中的值是形成的规律 print( ,end) for z in range(y*21):#再循环打印X 形成一个等腰三角形 range()中的值是形成的规律 print(X,end) print() pri…

adas记录仪app_路影行车记录仪app

路影行车记录仪app具有非常强大实用的行车视频记录功能,能够清晰的记录车主的行车过程,路影app可以通过手机对路影行车记录仪进行设置,预览、回放、下载图片/视频等操作,p还能保存各种视频文件,下载导航地图等。路影行…

连接硬盘计算机没显示,新买的移动硬盘在我的电脑中无法显示,但是右下角图标显示已经连接,? 爱问知识人...

USB不被电脑识别,如果是系统或系统自带的驱动的原因,一般经过重启就可恢复或开机按F8进入安全模式在退出,在进入正常模式(修复受损的注册表)。U盘插入电脑,电脑提示“无法识别的设备”故障诊断方法如下。第1步:如果U盘…

爬虫python软件准备_工具准备的差不多了,接下来就是python爬虫的封装了

python爬虫的方便大家都懂的。那么,既然常用,那么我们当然要封装啦。 那么我们可以先封装一个父类的爬虫 我自己的设计想法就是,首先,爬虫必须要有个字段来存储匹配的规则gainRule,然后有个字段存储需要取什么属性outA…

axure 输入框默认灰色字_Axure如何应对意外关闭

在使用Axure的时候,相信很多朋友都遇到过这样的情况:axure提交的东西都不见了。内容做到一半或者已经快要完成时,软件意外关闭,导致做的内容意外丢失。看着自己的劳动成果就这样浪费了,这种情况真的令人心疼。如果遇到…

计算机图像隐藏信息,学术讲座:杨庆隆-台湾成功大学-基于纠错码的信息隐藏与秘密图像共享...

学术讲座讲座题目:基于纠错码的信息隐藏与秘密图像共享讲座时间:2017.10.27。上午9:30-11:00讲座地点:十教10106讲座讲者:杨庆隆教授讲者简历:杨庆隆,台湾东华大学教授,博士&#xf…

matlaba绘制gps星空图_网络图横道图绘制软件 5.0免锁版告别纯手工绘制,修改工作量大!...

按图片加小编微信今日资料会员专属资料链接链接:https://pan.baidu.com/s/1AZY3cPeEv72GBRfESIwk_w提取码:88B8安装教程:1、下载压缩文件,解压后双击【网络计划V5.exe】,点击立即安装。2、没有替换补丁打开软件是这种情…

xutils找id空指针_xUtils更新到3.0后的基本使用规则

说实话,对于xUtils,是我最近才用到的开发框架(也是刚接触),对于其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是其最近更新到3.0也没有解决加载自定义ImageView报错的问题。我总是喜欢…

xp访问不了win10计算机,如何解决winxp访问win10共享打印机提示凭据不足

在win10的电脑上对着始按钮点鼠标右键,点击运行,或者直接“winR”输入gpedit.msc,点击确定,在本地策略组编辑器中依次点开——计算机配置——windows设置——安全设置——本地策略——安全选项,在右边的列表中找到“网…

centos7 关闭selinux_Devops之LDAP部署安装(centos7+openLDAP+PhpLDAPAdmin)

Devops之LDAP部署安装(centos7openLDAPPhpLDAPAdmin)由于公司部门的需求,需要搭建ldap来统一Devops的用户名和密码,具体的选择LDAP分析在上一篇里,这里主要记录一下部署centos7openLDAPPhpLDAPAdmin来实现Ldap服务,并使用phpldapa…

微信时代计算机教学,互联网+时代技工院校计算机教学方式研究

刘兆慧摘 要:互联网时代的到来让几乎每一个行业的生产经营方式发生巨大变革,教育行业也不可避免。本文就技工院校计算机在互联网时代背景下采取的教学方式进行研究。本次研究采取了实验法、观察法、比较法等研究方法。结果显示,在互联网环境下…

python编写add函数求和_为什么python不利用__iadd__来实现求和和链接运算符?

我刚做了一个有趣的测试:~$python3 # I also conducted this on python 2.7.6, with the same resultPython 3.4.0 (default, Apr 11 2014, 13:05:11)[GCC 4.8.2] on linuxType "help", "copyright", "credits" or "license&quo…

python count函数用法 comm_python3:MySQL 8.0学习笔记(第五部分:单表查询操作)

在讲解单表查询时,首先创建一个emp的员工表,表中字段包括:empno(员工编号)、ename(员工姓名)、job(员工职位)、mgr(员工领导)、hiredate&#xff…

该计算机没有运行windows无线服务器,老司机示范win7系统诊断提示此计算机上没有运行的windows无线服务的恢复方法...

随着win7系统的普及,大家是否遇到过win7系统诊断提示此计算机上没有运行的windows无线服务的情况,近日就有朋友向我反映win7系统诊断提示此计算机上没有运行的windows无线服务的问题,那么我们应该如何处理win7系统诊断提示此计算机上没有运行…

mysql主库从库在同一台服务器_MySQL数据库的主从配置(多主对一从)

一、实验环境部署主服务器 192.168.18.42 端口3306 》 从服务器 192.168.18.44 端口 3306主服务器 192.168.18.43 端口3306 》 从服务器 192.168.18.44 端口 3307##数据库,已经安装mysql服务,安装部分略。从服务器上的多个mysql实例,请看另…

golang int64转string_(一)Golang从入门到原地起飞

1、Golang 变量定义方法:1)定义变量 变量名 类型 表达式var go string "hello" 2)在函数内部,可以使用更简略的 : 方式声明并初始化变量。注意:短变量只能用于声明局部变量,不能用于全局变量的…

domino缺省注册服务器或无法访问,Domino服务器挂起时的现象

1。Domino 服务器挂起时的现象:2。Domino 服务器挂起时需要收集的数据:3。Domino 服务器需要在notes.ini中添加的参数:4。有关QNC/Nsd:5。设置Statrep.nsf 的方法:6。有关用Debug_Capture_Timeout1来收集信号灯的数据信…

latex 分页_latex 图片跨页显示问题???

latex 中一个页面有很多图片,超出一页就显示不出来了:请问怎么让后续图片显示在一个新页面中?图片显示代码如下每行显示三张:\begin{figure}\centering\includegraphics[width1.8 in]{images/Fig5_Sample11a.jpg}\quad\includegra…

session传递参数_JWT与Session的比较

如今,越来越多的项目开始采用JWT作为认证授权机制,那么它和之前的Session究竟有什么区别呢?今天就让我们来了解一下。JWT是什么定义JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑和自包含的方式,用于…