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

事务解释

原创
作者头像
lincoln
修改2021-07-28 10:19:18
5920
修改2021-07-28 10:19:18
举报
文章被收录于专栏:后端

前言

事务是我们保证数据正确性的重要手段,只要和数据库打交道,就得理解它的 ACID 特性,这也是一个专业程序员应该掌握的基本技能。

事务是什么?

在数据库的世界里,我们最常打交道的是 SQL 操作语句。然而,SQL 语句并不是数据库的最小处理单位,事务才是。

事务包含了一条或多条 SQL 语句。这些 SQL 语句会被视为一个任务集合,而事务就保证了这个任务集合里的 SQL 要么全部执行完,要么都不执行,不会让数据处于一个中间操作状态。

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

数据库是面向多线程多用户设计的,同一时刻会被多个程序读取或修改。在并发操作时,需要考虑对同一资源的访问控制。而事务在这方面有完善的处理机制,后面将会提及到事务的隔离性。

另外,事务能保证数据的完整性,这包括逻辑上的完整以及物理上的完整性。

逻辑上的完整性是指不会存在中间状态的数据;只会成功或失败回滚。

物理上的完整性是指事务只要执行成功,那么即使重启也不会丢失执行结果。(当然,前提是数据文件没有损坏......)

事务的使用

事务的整体流程主要涉及到几个状态点:

(1)开始事务:BEGIN TRANSACTION;

(2)提交事务:COMMIT;

(3)回滚事务:ROLLBACK;

一般的,当我们在执行一条 SQL 语句时就已经默认帮我们开启了事务。若执行成功,则会提交事务。若执行失败,则会回滚事务。

其中,提交事务后,相对应的数据也会被持久化到硬盘上,即时重启也不会丢失。

事务的 ACID

前面提到过,事务能保证数据的完整性,它主要是通过 ACID 特性来保证的:

1、原子性(Atomicity)

事务是一个不可分割的单位,因此在一个事务里的所有操作要么全部生效,要么全部不生效。

2、一致性(Consistency)

也可以理解为是预期状态的正确性,即从一个正确的状态到另一个正确的状态,这里的状态往往是由业务来定义的。

比如转账中的一个扣钱一个加钱,是我们规定的一个数据流转,那么执行前的账户余额和转账后的账户余额就得满足加减特性,这就是所谓的业务正确。

3、隔离性(Isolation)

数据库是允许多个事务并发执行的,每个事务在执行时理想状态是互不影响。然而要达到这个效果就得串行执行事务,这样并发能力也会大大降低。

因此,为了兼顾执行效率,将互相影响的程度分为了 4 个隔离级别:

1)未提交读:

举个例子,当事务 A 对表 1 进行更新操作后,有事务 B 读取了更新后的数据,后面又由于某种原因,事务 A 进行了回滚。

这样对于事务 B 来讲就依赖了一个无效的回滚数据,从而后面所做出的决策,也不一定正确了,这就是所谓的脏读,也就是未提交读隔离级别,此级别数据一致性最差,但并发性最好。

2)已提交读:

如果想防止脏读,就需要等待其他事务提交后再进行读取操作。防止了无效的回滚情况,这就是已提交读隔离级别。

3)可重复读:

已提交读的隔离级别考虑到了数据回滚的无效性,却无法阻止事务的多次提交。

比如事务 A 不断的对表进行修改提交,那么事务 B 就会在不同的时间点读取到不同的数据。

为了让事务 B 在执行期间读取的数据都是一致的,就有了可重复读的隔离级别,即事务 B 在执行期间,其他事务不得进行修改操作。

4)可串行化:

上面的可重复读隔离级别保证了事务执行期间读取的一致性。然而这里并不包括插入、删除操作。

即会出现读多读少数据的情况,这种现象叫做幻读。

为了解决幻读,只得进行串行化执行事务,才能互不影响。而此时的事务并发性是最低的。

4、持久化(Durability)

最后一个事务特性就是持久化性。通过日志等手段,只要我们的事务提交成功了,那么就意味着这次的数据操作是成功的。即使下次重启了程序,也不会丢失此处的操作结果!

总结

事务的 ACID 特性保证了数据的完整性。其中,事务的隔离级别越高,数据一致性越好,但并发能力就越差。这是需要我们在实际开发中取舍的。像日志记录的读取,使用脏读就对总体影响不大。


感兴趣的朋友可以搜一搜公众号「 阅新技术 」,关注更多的推送文章。

可以的话,就顺便点个赞、留个言、分享下,感谢各位支持!

阅新技术,阅读更多的新知识。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 事务是什么?
  • 事务的使用
  • 事务的 ACID
    • 1、原子性(Atomicity)
      • 2、一致性(Consistency)
        • 3、隔离性(Isolation)
          • 1)未提交读:
          • 2)已提交读:
          • 3)可重复读:
          • 4)可串行化:
        • 4、持久化(Durability)
        • 总结
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档