数据库:事务

本文详细介绍了事务的概念、使用方法,包括开启事务、执行SQL语句和回滚/提交,以及事务的四个特性(原子性、一致性、持久性和隔离性)。重点讨论了并发执行事务可能带来的问题和MySQL的四种隔离级别,以确保数据一致性与并发性能的平衡。
摘要由CSDN通过智能技术生成

目录

1.为什么要使用事务

2.事务的概念

3.使用

4.特性

5.并发执行事务可能带来的问题

6.MySQL的四种隔离级别

7.总结


1.为什么要使用事务

准备测试表:

drop table if exists accout;
create table accout(
id int primary key auto_increment,
name varchar ( 20 ) comment ' 账户名称 ' ,
money decimal ( 11 , 2 ) comment ' 金额 ' );
insert into accout(name, money) values
( '小飞 ' , 5000 ),
( '飞天 大盗 ' , 1000);
比如说,飞天大盗把从小飞的账户上偷盗了 2000

--小飞账户减少2000
update accout set money=money-2000 where name ='小飞';

--四十大盗账户增加2000
update accout set money=money+2000 where name ='飞天大盜';

假如在执行以上第一句 SQL 时,出现网络错误,或是数据库挂掉了,小飞的账户会减少 2000 ,但是飞天大盗的账户上就没有了增加的金额,这显然不是正常的结果。
解决方案:使用事务来控制,保证以上两句 SQL 要么全部执行成功,要么全部执行失败。

2.事务的概念

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。 在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。

3.使用

1 )开启事务: start transaction;
2 )执行多条 SQL 语句
3 )回滚或提交: rollback/commit;
  说明: rollback 即是全部失败, commit 即是全部成功。
  start transaction;
-- 小飞 账户减少 2000
  update accout set money=money- 2000 where name = '小飞 ' ;
-- 飞天 大盗账户增加 2000
  update accout set money=money+ 2000 where name = '飞天大盗';
  commit;

4.特性

  • 原子性: 保证多个操作被打包,成一个整体,要么能够全都执行正确,要么就一个都不执行
  • 一致性: 事务执行之前,和事务执行之后,数据能对上.数据不能离谱
  • 持久性: 事务这里执行的各种操作,都是持久生效的(最终写入到硬盘中的)一旦事务执行成功了,这里的所有操作产生的修改,都是写到硬盘里的
  • 隔离性: 并发执行事务的时候,隔离性会在执行效率 和 数据可靠 之间做出权衡。"隔离"描述的是同时执行的事务之间相互的影响。隔离性越高, 并发性就越低. 数据越可靠,性能就越低

   原子性可以可以类比于操作系统内核中的原语部分,一致性和持久性很容易理解,隔离性的话,要明白隔离和数据可靠相对应的,并发和运行效率,性能想对应的。

5.并发执行事务可能带来的问题

    1.脏读:读到了写事务提交之前的中间数据(脏数据)

    2.不可重复读:一个事务中,多次读取同一个数据,发现数据不一样 (在读的过程中,另一个事务修改了数据)

    3.幻读:一个事务之内,多次读到的数据,值相同,但是结果集不同

6.MySQL的四种隔离级别

    MySQL中提供了四种事务的隔离级别来方便我们解决5中的3个问题:

    1.READ UNCOMMITTED

     该级别指的是允许读未提交的数据,其隔离程度最小,易产生脏读,不可重复读,幻读的问题,同时该级别下事务的并发程度最高,执行效率最高。

    2.READ COMMITTED

     该级别指的是允许读已提交的数据(给写加锁),解决了脏读的问题,仍存在不可重复读和幻读的问题,隔离性相对提高一部分,并发程度有所降低。

    3.REPEATABLE READ

     该级别指的是允许重复读取数据(给读和写都加了锁),解决了脏读和不可重复读的问题,幻读问题未解决,隔离性进一步提高,并发程度进一步降低。

    4.SERIALIZABLE

     该级别事务彻底的串行执行,解决了脏读,不可重复读,幻读的问题,隔离性最高, 并发性最低(没有),数据最可靠,效率也最低。

ps:MySQL的默认隔离级别为第三种,也就是REPEATABLE READ

7.总结

    事务因其原子性可以把多个操作打包为一个操作,要么同时执行成功,要么不执行,进行回滚。使得我们的操作更加的符合实际的操作需求,保证能得到预期的结果。

    感谢大家能看到这里!!!阿里嘎多!!!

    

  • 32
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值