mysql12 其他操作
|
索引、视图,导入和导出,备份和恢复等。 这些概念对于数据库管理员而言都非常重要,请仔细理解并完成所有实验操作。 作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会了解 |
下载资源:git clone https://github.com/shiyanlou/SQL6
加载数据:mysql> source /home/shiyanlou/Desktop/SQL6/MySQL-06.sql
1、索引
索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速 找到所需的内容。当表中有大量记录时,若要对表进行查询,没有索引的情况是全表 搜索:将所有记录一一取出,和查询条件进行对比,然后返回满足条件的记录。这样 做会执行大量磁盘 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 开销。
2、视图
视图是从一个或多个表中导出来的表,是一种虚拟存在的表。它就像一个窗口,通过这个窗口可以看到系统专门
提供的数据,这样,用户可以不用看到整个数据库中的数据,而只关心对自己有用的数据。
注意理解视图是虚拟的表:
。数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中;
。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据;
。视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变;
。在使用视图的时候,可以把它当作一张表。
创建视图的语句格式为:
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;

3、导入
此处讲解的是导入一个纯数据文件,该文件中将包含与数据表字段相对应的多条数据,这样可以快速
导入大量数据,除此之外,还有用 SQL 语句的导入方式,语法为:source *.sql 这是实验中经
常用到的。两者之间的不同是:数据文件导入方式只包含数据,导入规则由数据库系统完成;SQL
文件导入相当于执行该文件中包含的 SQL 语句,可以实现多种操作,包括删除,更新,新增,甚至
对数据库的重建。
数据文件导入,可以把一个文件里的数据保存进一张表。导入语句格式为:
LOAD DATA INFILE '文件路径和文件名' INTO TABLE 表名字;
现在 SQL6 目录下有一个名为 in.txt 的文件,我们尝试把这个文件中的数据导入数据库
mysql_shiyan 的 employee 表中。
由于导入导出大量数据都属于敏感操作,根据 mysql 的安全策略,导入导出的文件都必须
在指定的路径下进行,在 mysql 终端中查看路径变量:
mysql -uroot mysql> show variables like '%secure%'; +--------------------------+-----------------------+ | Variable_name | Value | +--------------------------+-----------------------+ | require_secure_transport | OFF | | secure_auth | ON | | secure_file_priv | /var/lib/mysql-files/ | +--------------------------+-----------------------+ 3 rows in set (0.00 sec)
注意到 secure_file_priv 变量指定安全路径为 /var/lib/mysql-files/ ,要导入数据文件,
需要将该文件移动到安全路径下。
sudo cp -a /home/shiyanlou/Desktop/SQL6 /var/lib/mysql-files/
使用命令 sudo vim /var/lib/mysql-files/SQL6/in.txt 查看 in.txt 文件中的内容:




浙公网安备 33010602011771号