4、MySQL 多表查询与事务的操作

本文详细介绍了MySQL中的多表查询,包括笛卡尔积、内连接(隐式与显示)、外连接(左外和右外)等,并探讨了子查询的不同情况。同时,文章深入讲解了事务的概念、特性、手动提交事务的流程、回滚点的设定以及事务的隔离级别。通过对实例的解析,帮助读者理解如何在实际开发中有效地进行数据库操作。
摘要由CSDN通过智能技术生成

1 表连接查询

在这里插入图片描述

笛卡尔积现象

select * from emp, dept ; -- 笛卡尔积, 两表数据相乘
-- 乘积筛选后的结果, 两边能匹配上的数据
select * from emp, dept where emp.deptno = dept.deptno;
select * from emp e, dept d where e.deptno = d.deptno;
select e.ename, d.dname from emp e, dept d where e.deptno = d.deptno;

在这里插入图片描述
在这里插入图片描述

内连接

⽤左边表的记录去匹配右边表的记录,如果符合条件的则显示。如:从表.外键 = 主表.主键

隐式内连接

隐式内连接:看不到 JOIN 关键字,条件使⽤ WHERE 指定

SELECT 字段名 FROM 左表, 右表 WHERE 条件;
select * from emp, dept where emp.dept_id = dept.id;

显示内连接

显示内连接:使⽤ INNER JOIN … ON 语句,可以省略 INNER

– 内连接
select * from emp e inner join dept d on e.deptno = d.deptno;

内连接查询步骤

  1. 确定查询哪些表
  2. 确定表连接的条件
  3. 确定查询的条件
  4. 确定查询的字段

– 表连接 join
/

内连接 [inner] join
外连接
左外连接 left [outer] join
右外连接 right [outer] join
oracle - 全外连接 full [outer] join

连接的选择,主要取决于查询结果,需要哪张表的全部数据
需要显示全部数据的表, 称为"驱动表"
/*

左外连接

– 左外连接
select * from emp e left outer join dept d on e.deptno = d.deptno;
select * from dept d left outer join emp e on e.deptno =
d.deptno;

##右外连接

  • 右外连接
    select * from emp e right outer join dept d on e.deptno = d.deptno;
    三者之间关系
    在这里插入图片描述

子查询

引入

-- 需求: 查询开发部中有哪些员⼯
select * from emp;
-- 通过两条语句查询
select id from dept where name = '开发部';
select * from emp where dept_id = 1;
-- 使⽤⼦查询
select * from emp where dept_id = (select id from dept where name = '市场
部');

⼦查询的概念:

  1. ⼀个查询的结果做为另⼀个查询的条件
  2. 有查询的嵌套,内部的查询称为⼦查询
  3. ⼦查询要使⽤括号

2.2 ⼦查询结果的三种情况

在这里插入图片描述

单列单行

在这里插入图片描述

单列多行

在这里插入图片描述

多行多列

在这里插入图片描述

小结

⼦查询结果只要是单列,则在 WHERE 后⾯作为条件
⼦查询结果只要是多列,则在 FROM 后⾯作为表进⾏⼆次查询

3 事务

引入

什么是事务:
在实际的开发过程中,⼀个业务操作,如:转账,往往是要多次访问数据库才能完成的。转账是⼀个⽤户扣钱,另⼀个⽤户加钱。如果其中有⼀条 SQL 语句出现异常,这条 SQL 就可能执⾏失败。
事务执⾏是⼀个整体,所有的 SQL 语句都必须执⾏成功。如果其中有 1 条 SQL 语句出现异常,则所有的 SQL 语句都要回滚,整个业务执⾏失败。

MYSQL 中可以有两种⽅式进⾏事务的操作:

  1. ⼿动提交事务
  2. ⾃动提交事务

手动提交事物

功能SQL语句
开启事务start transaction;
提交事务commit;
回滚事务rollback;

过程

在这里插入图片描述

3.5 回滚点

定义

在某些成功的操作完成之后,后续的操作有可能成功有可能失败,但是不管成功还是失败,前⾯操作都已经成功,可以在当前成功的位置设置⼀个回滚点。可以供后续失败操作返回到该位置,⽽不是返回所有操作,这个点称之为回滚点。

回滚点的操作语句语句
设置回滚点savepoint 名字
回到回滚点rollback to 名字

事务的隔离级别

事务的四⼤特性 ACID

事务特性含义
原⼦性(Atomicity)每个事务都是⼀个整体,不可再拆分,事务中所有的 SQL 语句要么都执⾏成功, 要么都失败。
⼀致性(Consistency)事务在执⾏前数据库的状态与执⾏后数据库的状态保持⼀致。
隔离性(Isolation)事务与事务之间不应该相互影响,执⾏时保持隔离的状态。
持久性(Durability)⼀旦事务执⾏成功,对数据库的修改是持久的。就算关机,也是保存下来的。

事务的隔离级别

在这里插入图片描述

MySQL 数据库有四种隔离级别

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值