Java知识点总结:想看的可以从这里进入
目录
- 2.7、视图、游标
- 2.7.1、视图
- 2.7.2、游标
- 2.7、慢查询日志
2.7、视图、游标
2.7.1、视图
视图是一种虚拟存在的表,同真实表一样,视图也由列和行构成,它不存在于数据库中,是我们在使用sql语句后得到一些数据,然后 MySQL 以得到的数据为基准动态生成的表。它是由一张或多张表的数据而形成的。
所有视图的数据是依赖于真实的数据表,一旦数据表的数据发生改变,视图中的数据也会发生改变。所有视图可以按我们所需进行筛选数据显示,它提高了SQL语句的复用性和表的安全性。
- 视图不是数据库中真实的表,是一张虚拟表,是基于真实表中的数据,它是根据 sql 语句产生的。
- 视图没有实际的物理记录,不是以数据集的形式存储在数据库中的,它只是显示 sql 语句临时检索的数据的一个窗口,方便我们查看结果。
- 视图是查看数据表的一种方法,使用视图的数据安全性更高,可以让用户不接触数据表。
- 视图的建立和删除只影响视图本身,不影响对应的基本表。
- 视图表可以和真实表一样进行增删改查等操作
-- 创建视图
CREATE VIEW 视图名 AS select语句; -- 通过那一条语句创建视图
-- 修改视图
ALTER VIEW 视图名 AS select语句;
-- 查看视图的创建语句
SHOW CREATE VIEW 视图名;
-- 查看存在那些视图
SHOW TABLE STATUS WHERE comment = 'view';
-- 删除视图
DROP VIEW 视图名;

2.7.2、游标
游标是一种使数据操作更加灵活的手段,它能使我们从查询到的多条语句中精确的提取一条记录的机制。
可以把游标理解成一个指针,它就是帮助我们从sql语句的结果集中每次提取一个数据的机制。通过游标每次定位一条数据并取出,然后游标指针下移定位到下一条数据,或者上移定位到上一条数据。类似于在Java中的迭代器,把数据进行逐条遍历。
游标是针对每一行数据而言,它可以把数据进行分离,方便我们对每条数据进行分别的处理。但也正是因为游标是一条条处理数据的,所以当数据量很庞大的时候,会导致速度较慢、内存不足的情况产生,而且在业务中可能会出现死锁影响其他业务操做。
在使用游标时要经历:定义、打开、使用、关闭几个步骤。
-- 定义游标
DECLARE 游标名称 CURSOR FOR 使用游标的sql语句;
-- 打开游标
OPEN 游标名称
-- 取出数据,将数据保存到注定变量中
FETCH 游标名称 INTO 变量名称1,变量名称2,...;
-- 关闭游标
close 游标名称;
2.7、慢查询日志
MySQL提供的一种日志记录,用于记录执行时间超过long_query_time的sql语句。通过慢查询日志,可以查找出哪些查询语句的执行效率低,以便进行优化,long_query_time的默认值为10,记录运行10秒以上的语句。
如果不是调优需要的话,一般不启动该,开启慢查询日志会或多或少带来一定的性能影响。
-
slow_query_log:是否开启慢查询日志,1表示开启,0表示关闭。
查询是否开启:show variables like ‘%slow_query_log%’
set global slow_query_log=1开启了慢查询日志只对当前数据库生效,MySQL重启后则会失效。要永久生效,就必须修改MySQL配置文件my.cnf,然后重启MySQL服务器才能生效。
-
slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
-
long_query_time:慢查询阈值,当查询时间多于设定的阈值时,记录日志。
查看:show variables like ‘long_query_time%’;
设置:set global long_query_time=;
-
log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。
查看:show variables like ‘log_queries_not_using_indexes’
设置:set global log_queries_not_using_indexes=1
-
log_output:日志存储方式。log_output=‘FILE’表示将日志存入文件,默认值是’FILE’。log_output='TABLE’表示将日志存入数据库。
查看:show variables like ‘%log_output%’;
设置:set global log_output=‘TABLE’;