前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL的事务

MySQL的事务

作者头像
是小张啊喂
发布2022-12-07 14:35:24
6580
发布2022-12-07 14:35:24
举报
文章被收录于专栏:软件软件

什么是事务?

事务就是要保证一组数据库操作,要么全部成功,要么全部失败,在MySQL中,事务支持是在引擎层实现的

代码语言:javascript
复制
优点:支持严格的ACID属性(原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability))

原子性(atomicity):构成事务的所有操作,要么全部执行,要么全部不执行,不可能会出现一部分成功一部分失败的情况

一致性(consistency):在事务执行前后,数据库一致性没有被破坏

隔离性(isolation):数据库中的事务一般是并发的,隔离性是指并发的两个事务的执行互不干扰,一个事务不能看到其他事务运行过程的中间状态,通过配置事务隔离级别可以避免脏读、重复读等问题

持久性(durability):事务完成后,该事务对数据的更改会被持久化到数据库不会被回滚

事务隔离级别

  1. 读未提交(Read uncommitted):一个事务还没提交时,它做的修改就能被别的事务看到

事务A

事务B

select * from user;

insert into user(username) values('张三');

select * from user; 张三

  • 事务A读取到了未提交的事务B,这就是读未提交
  1. 读已提交(Read committed):一个事务提交之后,它做的变更才会被其他事务看到

事务A

事务B

select * from user;

insert into user(username) values('张三');

select * from user;

commit;

select * from user; 张三

  • 事务A只能读取到了已经提交的事务,这就是读已提交
  1. 可重复读(Repeatable read):个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的

事务A

事务B

select * from user;

insert into user(username) values('张三');

commit;

select * from user;

  • 事务A读取不到已经提交的事务,这就是可重复读
  1. 串行化(Serializable ):“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。但是这种事务隔离级别效率低下,比较耗数据库性能

事务A

事务B

select * from user;

insert into user(username) values('张三');

select * from user;

commit;

张三

  • 只有当事事务A的操作提交过后,事务B才会继续执行
在事务的并发操作中可能会出现脏读,不可重复读,幻读

什么是脏读?

事务A

事务B

将n修改 n=1

读取到修改的数据 n=1

事务提交

事务B读取未提交的事务,这就是脏读

什么是不可重复读?

事务A

事务B

获取 n=0

将n修改 n=1

事务提交

获取 n=1

事务A两次读取的数据不同,就是不可重复读

什么是幻读?

事务A

事务B

将n修改n=1

读取到修改的数据 n=1

事务提交

各类事务级别在面对并发情况下的情况 | | 脏读 | 不可重复读 | 幻读 | | --- | --- | --- | --- | | 读未提交 | √ | √ | √ | | 读已提交 | × | √ | √ | | 可重复读 | × | × | √ | | 串行化 | × | × | × |

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是事务?
    • 事务隔离级别
      • 在事务的并发操作中可能会出现脏读,不可重复读,幻读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档