阅读本文大概需要 8 分钟

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

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

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

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

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

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

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

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

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


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;

5、导入

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

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

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

导入语句格式为:

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

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

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


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

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

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


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


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


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


6、导出

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

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

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

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


现在我们把整个 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 命令查看。


数据导出成功。

7、总结

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

今天的学习就到这里啦。

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

祝大家周末愉快~

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

参考:

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

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

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

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

  1. mysql导入dat文件_从零开始学习 MySQL 系列--索引、视图、导入和导出

    前言 上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识. 作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会了解,尤其是关于索引的内 ...

  2. access 导入 txt sql语句_从零开始学习 MySQL 系列索引、视图、导入和导出

    阅读本文大概需要 8 分钟 前言上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识.作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会 ...

  3. outlook规则导出_如何在Outlook和Gmail之间导入和导出联系人

    outlook规则导出 You can use Microsoft Outlook with just about any email account, including Gmail-but Out ...

  4. oracle数据泵导入导出_【软件】R语言数据导入与导出

    "R语言导入文本和xlsx文件数据的方法,以及数据与图片的输出" 许多数据往往保存在TXT文件或Excel文件中,该如何将这些文件导入R语言进行分析呢?另外,使用R语言处理完数据之 ...

  5. select计数语句_从零开始学 MySQL SELECT 语句详解

    阅读本文大概需要 7 分钟 前言上篇文章我们学习了 MySQL 的五种约束,今天这篇文章我们来学习下 SELECT 语句.在数据库操作语句中,使用最频繁,也被认为最重要的是 SELECT 查询语句.在 ...

  6. 焱老师带你学习MYSQL系列 第二篇 (MYSQL 数据结构)

    相关系列链接 焱老师带你学习MYSQL系列 第六篇 (MYSQL是如何实现锁的) 焱老师带你学习MYSQL系列 第五篇 (MYSQL事务隔离级别是如何实现的) 焱老师带你学习MYSQL系列 第四篇 ( ...

  7. hive 如果表不存在则创建_从零开始学习大数据系列(四十七) Hive中数据的加载与导出...

    [本文大约1400字,阅读时间5~10分钟] 在<从零开始学习大数据系列(三十八) Hive中的数据库和表>和<从零开始学习大数据系列(四十二)Hive中的分区>文章中,我们已 ...

  8. sql 多表多行模糊查询_从零开始学习SQL(五)多表查询

    经过之前的学习,现在我们已经对查询有了一定的了解,但是我们目前的所有查询都只能找到在一张表中的数据,但如果我们需要寻找分布在多张表格中的数据时,这种之前的查询就做不到了,这时就需要引入一种新的查询方法 ...

  9. 华为交换机模拟器_从零开始学习华为路由交换 | 配置缺省静态路由

    实验前准备 1.电脑上安装华为ENSP模拟器 2.添加三台路由器 命令介绍 AR1配置 1.配置接口IP 2.配置缺省静态路由: [R1]ip route-static 0.0.0.0 0 g0/0/ ...

最新文章

  1. python跨行字符串 变量_在Python中有没有在多行字符串中使用变量的方法?
  2. 一行python代码能干_几个小例子告诉你, 一行Python代码能干哪些事
  3. Redis学习笔记之Redis单机,伪集群,Sentinel主从复制的安装和配置
  4. ThreadLocal是救火队长
  5. [html] 当html中使用map标签时,area中coords值如何精确定位呢?
  6. --4、实验室设备管理(表)
  7. RabbitMq(十) 消息过期时间TTL介绍以及代码实现
  8. Reading privileged memory with a side-channel
  9. 一步一步學習partition之range分區如何創建
  10. 第一周周冠军带你解析赛题,尝试广告算法新思路
  11. 路由器和iP地址的那些事
  12. Chrome打开cocos2d-html5官方Demo黑屏
  13. latex 公式去掉不要编号
  14. 【译文】Nodejs官方文档(Part 3 断言测试)
  15. 树莓派的IP地址查找
  16. 分享一个奇葩SM2258XT板子(100-H00112581-590)没有CE跳线,只有CE飞线,顺便量产开卡
  17. dexpress 流程图_请教devexpress的winform界面开发基本步骤
  18. 如何在家里制作服务器,在家如何架设服务器?
  19. 沙盘游戏让我变成“诗人”
  20. OpenCV—python OCR文本检测

热门文章

  1. oracle 试图访问已经在使用的事物处理临时表,解决ORA-14450:试图访问已经在使用的事务处理临时表...
  2. python元组求和_Python 列表和元组 - 学习笔记(持续更新)
  3. Java8 Stream详解~聚合(max/min/count)
  4. SpringBoot 自带工具类~ResourceUtils
  5. Effective Java -- 思维导图
  6. java调用shell脚本及注意事项
  7. Java测试驱动开发--总结
  8. 对超长的文字换行处理:程序和CSS样式
  9. 计算机科学中的逻辑学术,简述逻辑学在计算机科学中的应用
  10. linux date命令显示毫秒,解决MacOS系统中date命令没有毫秒和sha512sum、sha256sum、md5sum等命令的问题...