day5
2024-12-16 19:28:32 0 举报
AI智能生成
1
作者其他创作
大纲/内容
01.数据库子查询方法(看懂查询方法)
查询概念介绍说明
将一个查询语句完全嵌套到另一个查询语句中的的WHERE或HAVING的条件表达式中,这种查询称为嵌套查询;
通常把内部的、被另一个查询语句调用的查询称为"子查询";
将调用子查询的查询语句称为"父查询",子查询还可以可以调用子查询;
通常把内部的、被另一个查询语句调用的查询称为"子查询";
将调用子查询的查询语句称为"父查询",子查询还可以可以调用子查询;
子查询应用方式方法
不相关子查询:
单行子查询
多行子查询
相关子查询
不相关子查询实践应用
没有应用子查询操作时
select sal from emp where ename='CLARK'; --2450
select * from emp where sal > 2450;
select sal from emp where ename='CLARK'; --2450
select * from emp where sal > 2450;
# 进行应用子查询操作后
select * from emp where sal > (select sal from emp where ename='CLARK');
select * from emp where sal > (select sal from emp where ename='CLARK');
不相关子查询特点:
一条SQL语句含有多个select,先执行子查询,再执行外查询;
子查询可以独立运行,就称为不相关子查询;根据子查询的结果行数,可以分为单行子查询和多行子查询;
一条SQL语句含有多个select,先执行子查询,再执行外查询;
子查询可以独立运行,就称为不相关子查询;根据子查询的结果行数,可以分为单行子查询和多行子查询;
单行子查询应用
单行子查询就是子查询输出的结果集为一行信息,可以直接进行比较即可;(< > =)
练习01:查询工资高于平均工资的雇员名字和工资;
select ename,sal from emp where sal >(select avg(sal) from emp);
select ename,sal from emp where sal >(select avg(sal) from emp);
多行子查询应用
多行子查询就是子查询输出的结果集为多行信息,不能直接进行比较处理,需要借助 `in 或者 any 或者 all` 进行处理;
相关子查询:
一条SQL语句含有多个select,先执行外查询,再执行子查询;
子查询不可以独立运行,就称为相关子查询;
- 相关子查询优势:操作简单,功能强大(一些使用不相关子查询不能实现或者实现繁琐的子查询,可以使用相关子查询实现)
- 相关子查询缺陷:语句操作稍难理解
子查询不可以独立运行,就称为相关子查询;
- 相关子查询优势:操作简单,功能强大(一些使用不相关子查询不能实现或者实现繁琐的子查询,可以使用相关子查询实现)
- 相关子查询缺陷:语句操作稍难理解
练习01:查询本部门最高工资的员工
select * from emp e where e.deptno=10 and sal = (select max(sal) from emp a where a.deptno=10);
select * from emp e where e.deptno=10 and sal = (select max(sal) from emp a where a.deptno=10);
02.数据库服务日志管理
创建日志
mkdir /data/3306/log -p
chown -R mysql.mysql /data/3306/log
chown -R mysql.mysql /data/3306/log
通用日志管理:(创建生成日志 如何查看日志信息)
- 通用日志:记录登录数据库用户的操作行为日志 (审计日志)
-- 创建生成日志
vi /etc/my.cnf
general_log=ON
general_log_file=/data/3306/log/general.log
vi /etc/my.cnf
general_log=ON
general_log_file=/data/3306/log/general.log
-- 查看日志信息
[root@db-01 ~ 11:05]# tail -f /data/3306/log/general.log
[root@db-01 ~ 11:05]# tail -f /data/3306/log/general.log
错误日志管理:(创建生成日志 如何查看日志信息)
- 错误日志:记录数据库服务运行情况信息 (排查故障)
-- 创建生成日志
vi /etc/my.cnf
log_error=/data/3306/log/error.log
touch /data/3306/log/error.log
chown mysql.mysql /data/3306/log/error.log
vi /etc/my.cnf
log_error=/data/3306/log/error.log
touch /data/3306/log/error.log
chown mysql.mysql /data/3306/log/error.log
-- 查看日志信息:
cat /data/3306/log/error.log
cat /data/3306/log/error.log
-- 有些错误信息,是数据库程序中代码错误提示(看不懂的提示),需要借助AI工具进行排错 (AI 科学上网)
二进制日志管理:
二进制日志: 记录数据库用户DML DDL DCL操作语句信息(不包含查询语句信息) (恢复数据 主从同步) *****
1)二进制日志配置参数
log_bin -- 开启二进制日志,并设置保存路径信息(新版数据库默认开启 旧版数据库默认关闭)
sql_log_bin -- 是否临时禁用二进制日志记录功能 (临时设置--会话级别设置) 1-- 表示记录日志 0 -- 表示关闭记录功能
sync_binlog -- 二进制日志记录方式(数据库双一配置)
-- 参数信息配置0:表示由操作系统缓存自己决定,什么时候刷新日志到磁盘中; 性能考虑设置
-- 参数信息配置1:表示每次事务提交,立即刷新日志到磁盘中;(此方式配置更安全) 安全考虑设置
-- 参数信息配置N:表示每组事务提交,按照组的事务次数定义,确定刷新日志到磁盘中的频次;(可以有效减少IO性能损耗)
-- 参数官方资料链接:https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html
binlog_format -- 设置日志格式信息
SBR -- 语句格式记录binlog信息 可以清楚看到DML相关语句操作信息 update insert delete 恢复数据会出现不易
RBR -- 行格式记录binlog信息 不能清楚看到DML相关语句操作信息 将行的数据信息编码处理记录 恢复数据可以保证一致性
2)二进制日志查看方
3)二进制日志过滤查看
4)二进制日志恢复数据
5)二进制日志切割设置
6)二进制日志清理设置
7)二进制日志备份管理
0 条评论
下一页