前言
通过本节,你将了解到:事务、本地事务、分布式事务这几个名词的基本概念。
一、什么是事务?
什么是事务?
1.1 举个生活中的例子
去超市买东西,一手交钱,一手交货就是一个事务的例子。
事务的体现:交钱和交货必须全部成功,事务才能算成功,任何一个活动失败,整个事务就失败了了。
1.2 举个SQL例子
张三要给李四转账100元,那么我们会有这样的一段SQL:
begin transaction;
update account set money = money-100 where name = '张三';
update account set money = money+100 where name = '李四';
commit transaction;
事务的体现:这两个SQL要么全部成功,要么全部失败。
1.3 事务定义
事务是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务。
理解一:
事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。
理解二:
事务可以看做是一个大的操作,它由一系列操作组成,这些操作要么全部成功,要么全部失败。
二、本地事务/数据库事务
数据库事务:在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务。
本地事务:由于应用主要靠关系数据库来控制事务,而数据库通常和应用在同一个服务器,所以基于关系型数据库的事务又被称为本地事务。
BTW:本地事务也称为数据库事务或传统事务(相对于分布式事务而言)
三、分布式事务
分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程之间远程协作才能完成事务操作, 这种分布式系统环境下由不同的服务之间通过网络协作完成事务称为分布式事务。
例如:用户注册送积分事务、创建订单减库存事务,银行转账事务。
3.1 转账例子说明分布式事务
张三转账100元给李四:
本地事务的实现:
begin transaction;
//1.本地数据库操作:张三减少100元。
//2.本地数据库操作:李四增加100元。
commit transaction;
分布式事务的实现:
begin transaction;
//1.本地数据库操作:张三减少100元。
//2.远程调用:让李四增加100元。
commit transaction;
在这里本地事务,使用远程调用另外一个服务的情况下,这就会产生分布式事务了。本文我们先八卦到这里,下节课进行介绍一下《事务的ACID以及在数据库层面的体现》