MySQL(三)

– 数据库事务:业务层面上不可分割的最小单位
– DML:insert delete update - 对数据库的修改操作才必须要事务
– DQL: select 可以不需要事务

– MySQL:事务是自动提交的
– 提交commit:操作生效
– 回滚rollback:恢复到操作之前的数据

– 事务特性,事务的隔离级别
– 隔离级别解决事务的并发问题
– 1.脏读:一个事务读取到了另一个事务未提交的数据
– 2.幻读:一个事务两次读取,数据的数量、个数不同 insert delete
– 3.不可重复读:一个事务两次读取,数据内容不同 update

– 解决并发问题,设置事务隔离级别
– 1.读未提交 2.读已提交 3.可重复读 4.串行化

– 索引 index 提高查询效率
– 列:主键约束、unique约束,自动添加索引
– 1.经常出现在where、distinct、表连接条件的列,可以添加索引
– 2.数据量很大的表推荐添加索引,数据量小的表不推荐添加索引
– 3.经常需要DML操作的表,不建议添加索引
– 4.删除一些不必要的索引

select * from emp where empno = 7369;
– 创建索引
create index index_empno on emp(empno);
– 创建组合索引
create index index_e on emp(ename, sal);
– 在where条件后,按索引添加的顺序使用条件,就会自动使用索引
select * from emp where ename like ‘’ and sal < 3000;

– 删除索引
alter table emp drop index index_empno;
alter table emp drop index index_e;

– 视图:临时的表
– 将频繁使用的查询结果,做成视图
– 查询出的结果,本身不在任何基表中,不可以对数据进行修改操作
create view dept_avgSal
as
select deptno, avg(sal) avg_sal from emp group by deptno;
– 删除视图
drop view dept_avgSal;

select * from dept_avgSal where deptno = 10;

select
*
from
emp e
join
dept_avgSal d
on
e.deptno = d.deptno
where
e.sal > d.avg_sal;

/*
数据库出面试题的可能:
索引的好处【原理】
视图的好处
MySQL的数据库引擎
*/

– 1. 查询员工的姓名及其所在部⻔的名字和城市
select ename, dname, loc from emp e, dept d where e.deptno = d.deptno;

– 2. 查询员工的姓名和他的管理者的姓名
select e.ename, m.ename from emp e join emp m on e.mgr = m.empno;

– 3. 查询员工的编号、姓名、部⻔编码、部⻔名称以及部⻔所在城市。要求:把没有部⻔的员工也查出来
select
empno, ename, d.deptno, dname, loc
from emp e left join dept d on e.deptno = d.deptno;

– 4. 查询员工的信息及其所在部⻔的信息。要求:把没有员工的部⻔也查出来
select
empno, ename, d.deptno, dname, loc
from emp e right join dept d on e.deptno = d.deptno;

– 5. 查询员工的信息及其所在部⻔的信息。要求:只查询没有员工的部⻔
select
empno, ename, d.deptno, dname, loc
from emp e right join dept d on e.deptno = d.deptno
where ename is null;

– 6. 查询并显示SALES部⻔的职位
select distinct job from emp e join dept d on e.deptno = d.deptno where dname = ‘SALES’;

– 7. 查询所有部⻔的名称、所在地、员工数量以及平均工资
select
dname, loc, count(*), avg(sal)
from
dept d right join emp e on d.deptno = e.deptno
group by dname, loc;

/* 9. 假设员工表中,员工和管理者中间只有一个层级,
也就是说,每个员工最多只有一个上级,
作为管理者的员工不再有上级管理者,
并且,上级管理者相同的员工,他们属于同一个部⻔。
找出EMP中那些工资高于他们所在部⻔的管理者工资的员工。
*/
select * from emp e join emp m on e.mgr = m.empno
where e.sal > m.sal;
MySQL(三)