文章目录

  • 一、多表查询
  • 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)子查询的不同情况

  1. 子查询的结果是单行单列的,子查询可作为条件,使用运算符> >= < <= =去判断。
  2. 子查询结果是多行单列的,子查询可作为条件,使用运算符IN来判断。
  3. 子查询结果是多行多列的,子查询可以作为一张虚拟表参与查询。

二、事务

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 级别字符串