文章目录
- 一、多表查询
- 1.查询语法
- 2.多表查询分类
- 1.内连接查询:
- 2.外连接查询
- 3.子查询
- 二、事务
- 1.事务的基本介绍
- (1)概念:
- (2)操作:
- (3)事务的四大特征
- (4)事务的隔离级别
一、多表查询
1.查询语法
select 列名列表 from 列名列表 where 条件;
select *from a,b; -- 笛卡尔积,取a,b组合的所有情况
2.多表查询分类
1.内连接查询:
(1)隐式内连接:使用where条件消除无用数据
select emp.'name', emp.'age', dep.'name'
from emp,dep
where emp.dep_id = dep.id;
(2)显示内连接:
select 字段列表 from 表名1 inner join 表名2 on 条件;
2.外连接查询
(1)左外连接:
select 字段列表 from 表1 left[outer] join 表2 on 条件; -- 查询的是左表所有数据以及其交集部分
(2)右外连接:
select 字段列表 from 表1 right[outer] join 表2 on 条件; -- 查询的是右表中所有数据以及其交集部分
3.子查询
(1)例子
-- 查询中嵌套查询,成为嵌套查询,嵌套查询成为子查询
select max(salary) from emp;
select *from emp where emp.'salary' = 900;
select *from emp where emp.'salary' = (select max(salary) from emp);
(2)子查询的不同情况
- 子查询的结果是单行单列的,子查询可作为条件,使用运算符
> >= < <= =
去判断。 - 子查询结果是多行单列的,子查询可作为条件,使用运算符IN来判断。
- 子查询结果是多行多列的,子查询可以作为一张虚拟表参与查询。
二、事务
1.事务的基本介绍
(1)概念:
如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功要么同时失败。
(2)操作:
star transaction; -- 开启事务
rollback; -- 回滚事务
commit; -- 提交事务
(3)事务的四大特征
1.原子性:是不可分割的最小单位,要么同时成功,要么同时失败。
2.持久性:主事务提交或者回滚后,数据库会持久化保存数据。
3.隔离性:多个事务之间相互独立。
4.一致性:事务操作前后数据的总量不边。
(4)事务的隔离级别
1.概念:多个事务之间是隔离的,相互独立的。但是如果,多个事务操作同一批数据会引发一些问题,设置不同的隔离级别就可以解决这些问题。
-- 存在问题
(1)脏读:一个事务读取到另一个事务之中未提交的数据。
(2)不可重复读(虚读):在同一个事务中,两次读取到的数据不一样。
(3)幻读:一个事务操作(DML)操作数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。
2.隔离级别:
(1)read uncommitted:读未提交 -- 产生问题脏读不可重复读
(2)read committed:读已提交(oracle默认) -- 产生问题不可重复读,幻读
(3)repeatable read:可重复读(mysql默认) -- 产生问题幻读
(4)serializable:串行化 -- 可解决所有问题
注:隔离级别从小到大安全性越来越高,但是效率越来越低。
-数据库查询隔离级别:select @@tx_isolation; – 8.0版本更新为select @@global.transaction_isolation;
-数据库设置隔离级别:set global transaction isolation level 级别字符串