第二十三课:子查询,事务

本文介绍了数据库中的子查询概念,包括子查询的定义、使用场景及结果分类。接着,深入探讨了事务的重要性,特别是事务的原子性和一致性特征。还详细阐述了手动和自动提交事务的流程,并提到了事务的隔离级别,分析了并发操作可能导致的脏读、不可重复读和幻读问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子查询

子查询的概念:
1、一个查询的结果作为另一个查询的条件
2、有查询的嵌套,内部的查询称为子查询
3、子查询要使用括号

子查询的结果分为三种:
1、结果是单行单列,肯定在where后面作为条件,父查询使用:比较运算符,如>,<,<>,=等

 select max(salary) from emp; 
 select * from emp where salary = (select max(salary) from emp);
2、子查询结果是多行单列,结果集类似于一个数组,父查询使用in运算符
select dept_id from emp where salary > 5000;
select name from dept where id in (select dept_id from emp where salary > 5000);
3、子查询结果是多行多列,肯定在from后面作为表
select * from emp where join_date >= '2011-1-1';
select * from dept d, (select * from emp where join_date >= '2011-1-1') e where d.`id` = e.dept_id;

事务

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

手动提交事务:
开启事务:start transaction
提交事务:commit
回滚事务:rollback

手动提交事务使用的过程:
执行成功的情况:开启事务->执行多条SQL语句—>成功提交事务
执行失败的情况:开启事务—>执行多条SQL语句—>事务的回滚

自动提交事务:
MYSQL默认每一条DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执行完毕自动提交事务,MYSQL默认开始自动提交事务。
取消自动提交事务:select @@autocommit

回滚点:
在某些成功的操作完成之后,后续的操作有可能成功有可能失败,但是不管成功还是失败,前面的操作都已经成功了,可以在当前成功的位置设置一个回滚点,可以供后续失败操作返回到该位置 ,而不是返回所有操作,这个点称之为回滚点。
设置回滚点:savepoint
回到回滚点:rollback to
设置回滚点可以让我们在失败的时候回到回滚点,而不是回到事务开启的时候

事务的隔离级别:

事务的四大特性:
1、原子性:每个事务都是一个整体,不可再拆分,事务中的所有SQL语句要么执行成功,要么都失败
2、一致性:事务在执行前数据库的状态与执行后数据库的状态保持一致
3、隔离性:事务与事务之间不应该相互影响,执行时保持隔离的状态
4、持久性:一旦事务执行成功,对数据库的修改都是持久的

事务的隔离级别:
事务在操作时的理想状态:所有的事务之间保持隔离,互不影响。因为并发操作,多个用户同时访问一个数据。可能会引发并访问的问题:
1、脏读:一个事务读取了另一个事务中尚未提交的数据
2、不可重复读:一个事务中两次读取的数据内容不一致,要求的是一个事务中多次读取时数据是一致的,这是事务update时引发的问题
3、幻读:一个事务中两次读取的数据的数量不一致,要求在一个事务中多次读取的数据的数据量是一致的。

MYSQL数据库的四种隔离级别
上面在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值