39.javaEE-数据库(二)-函数/事件/备份/计划

视图

视图是由数据库中的一个表或多个表导出的虚拟表,是一种虚拟存在的表,方便用户对数据的操作。

一.视图的特点及作用:

1、简单性

看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

2、安全性

视图的安全性可以防止未授权用户查看特定的行或列,使有权限用户只能看到表中特定行的方法,如下:

(1)在表中增加一个标志用户名的列。

(2)建立视图,使用户只能看到标有自己用户名的行。

(3)把视图授权给其他用户。

3、逻辑数据独立性

二.视图的语法
1.创建视图语法:

CREATE VIEW <视图名> AS <SELECT语句>

例如:

CREATE VIEW emp_dept as SELECT e.id 编号,e.name 姓名,d.name 部门 FROM emp e LEFT JOIN dept d ON e.dept_id = d.id;

2.修改视图

ALTER VIEW <视图名> AS <SELECT语句>

例如:

ALTER VIEW emp_dept as SELECT e.id 编号,e.name 姓名,d.id 部门编号,d.name 部门 FROM emp e LEFT JOIN dept d ON e.dept_id = d.id;

3.删除视图

DROP VIEW <视图名1> [ , <视图名2> …]

例如:

DROP VIEW emp_dept;

自定义函数

1、创建函数

CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
函数体
END

注意:
1、参数列表 包含两部分:参数名 参数类型
2、函数体:肯定会有return语句,如果没有会报错如果return语句没有放在函数体的最后也不报错,但不建议
3、函数体中仅有一句话,则可以省略begin end
4、使用 delimiter语句设置结束标记

2、调用函数

SELECT 函数名(参数列表)

3、查看函数

SHOW FUNCTION STATUS;

4、删除函数

DROP FUNCTION IF EXISTS function_name;

备份

1.使用mysqldump实现逻辑备份

语法:
mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 地址:/备份文件.sql

C:\Users\13570>mysqldump -u root -p db10 > E:/db10.sql
Enter password: ****

2.恢复逻辑备份
语法:
[root@localhost backup]source 地址:/备份文件.sql

mysql> source E:/db10.sql

3.实现自动化备份

# 备份计划:
1. 什么时间 2:00
2. 对哪些数据库备份
3. 备份文件放的位置

# 备份脚本:
[root@localhost~]# vim /mysql_back.sql
# !/bin/bash
back_dir=/backup
back_file=`date +%F`_all.sql
user=root
pass=123

if [ ! -d /backup ];then
mkdir -p /backup

# 备份并截断日志
mysqldump -u${user} -p${pass} --events --all-databases > ${back_dir}/${back_file}
mysql -u${user} -p${pass} -e 'flush logs'

# 只保留最近一周的备份
cd $back_dir
find . -mtime +7 -exec rm -rf {} \;

# 手动测试:
[root@localhost ~] # chmod a+x /mysql_back.sql 
[root@localhost ~] # chattr +i /mysql_back.sql
[root@localhost ~] # /mysql_back.sql

# 配置cron:
[root@localhost ~] # crontab -l
2 * * * /mysql_back.sql

4.数据库迁移
务必保证在相同版本之间迁移

mysqldump -h 源IP -uroot -p123 --databases db1 | mysql -h 目标IP -uroot
-p456

sql计划

作用:通常sql优化时用sql计划来验证当前sql的性能如何,花费多长时间等.

1、什么是sql执行计划
执行计划,就是mysql如何执行一条Sql语句,包括sql查询的顺序、是否使用索引、以及使用索引的信息等,一条SQL性能的好坏,可以通过查看执行计划很直观的看出来,执行计划提供了各种查询类型与级别,方便我们进行查看以及为作为性能分析的依据。

2、sql的执行过程
数据库本身的功能架构分为三个部分,分别是 应用层、逻辑层、物理层。

应用层:这一层是和客户端打交道的,主要负责与客户端进行交互,建立链接,记住链接状态,返回数据,响应请求。
逻辑层:主要负责查询处理、事务管理等其他数据库功能处理。
物理层:实际物理磁盘上存储的文件,主要分为数据文件,日志文件。

以查询为例,首先应用层接受到查询sql之后,数据库会立即分配一个线程对其进行处理;第一步查询处理器会对SQL查询进行优化,优化后会生成执行计划;然后交由计划执行器来执行。计划执行器需要访问更底层的存储管理器,存储管理器来操作数据,他们各自的分工各有不同;最终通过调用物理层的文件获取到查询结构信息,将最终结果响应给应用层。

3、执行计划分析
在MySQL中,我们可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,如下:


explain
SELECT
   gc.*,u.user_name,u.head
FROM
   tb_goods_comment gc,tb_goods gd,tb_user u
WHERE
   gd.sid = 3
AND
   gc.gid = gd.gid
AND
   u.uid = gc.uid
ORDER BY gc.dateline DESC

结果显示:
在这里插入图片描述

表头分析:
id:表示一个查询中各个子查询的执行顺序。id相同执行顺序由上至下;id不同,id值越大优先级越高,越先被执行;id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中。

select_type:表示查询类型,常见值如下:
在这里插入图片描述
table:输出结果集的表(表别名)

type:访问类型,常见访问类型如下:
在这里插入图片描述
possible_keys: 表示查询可能使用的索引

key: 实际使用的索引

key_len: 使用索引字段的长度

ref: 使用哪个列或常数与key一起从表中选择行。

rows: 扫描行的数量

filtered: 存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例(百分比)

Extra: 执行情况的说明和描述,包含不适合在其他列中显示但是对执行计划非常重要的额外信息,最主要的有一下三种:
在这里插入图片描述

发布了42 篇原创文章 · 获赞 0 · 访问量 643

猜你喜欢

转载自blog.csdn.net/weixin_45449911/article/details/104686577