layout: post title: "数据库事务" subtitle: " "数据库事务"" date: 2018-10-20 06:00:00 author: "青乡" header-img: "img/post-bg-2015.jpg" catalog: true tags: - database transaction - transaction
什么是事务
1.要么全部提交,要么全部不提交。//原子性
2.如果只有一个sql,虽然只有1个sql,但是仍然是一个事务。即每个用户的每次请求连接都是一个事务,不管是一个还是多个sql的执行,都是一个事务,都是必须要有以下3个步骤:
1)开启事务
既可以显式的写出了,也可以是隐式的。一般执行一个sql的时候,就已经默认的隐式的开始一个事务了。
2)执行sql
这个必须有,因为是业务。
3)提交
既可以显式的写出来,也可以是隐式的。怎么隐式?设置自动提交事务即可。怎么设置?连接对象.set自动提交(true)。
总结 一般分布式事务的时候,需要 1.开始事务 2.确认/提交事务 3.取消事务 。
四大要素
即ACID。
1.原子性
automicity。
操作原子性。
一个事务包含多个sql/操作。
多个sql要么全部提交,要么全部不提交。
2.一致性
consistency。
数据库里的数据一致性。
最经典的例子就是银行转账。一个账户加钱,一个账户减钱。这就叫一致性。编程语言的经典例子是hello world,事务的经典例子是银行转账。
3.隔离性
isolation。
如果操作的是数据库里的同一个数据,那么不同事务必须要有一个锁来保证同一时间只能有一个事务访问该数据。就像是不同线程访问同一个数据一样,有线程同步的问题。
4.持久性
durability。
就是数据要写到数据库里的意思。写就是持久化,持久化就是写数据。
2大难点
1.隔离级别
diedai.github.io/2018/10/21/…
2.传播规则
diedai.github.io/2018/10/22/…
应用场景
钱包注册
注册功能包含了很多子功能, 1.创建用户 按用户分类 1)个人用户 只是单独的钱包用户。 2)商家用户 绑定商家用户。
2.创建账户 第三方支付平台的账户体系,就是这个时候创建的。
3.其他很多辅助功能 各种配置表。比如,费率等。
分布式事务
原理
1.单机事务
单机事务,就是上面讲的那些,就是多个sql,要么全插,要么全不插,而且是在一台机器上。
一台机器上的数据库本身就是支持事务功能的。
2.多机事务
但是多台机器上的多个数据库,就不支持事务。
这里有2种情况,一种是多台机器(分布式服务)但是一个数据库;一种是多台机器,多个数据库。
技术实现
1.实现原理
步骤,
1)多个sql全部准备提交
2)协调者提交所有sql
举个例子,结婚的例子,
1)2个人都同意结婚
2)教堂传教士说可以结婚
2.代码
协议
两阶段提交。//其实就是上面说的2个步骤。 pasox。
应用场景
支付系统的记账
步骤,
1.更新订单的支付状态
2.更新账户金额
技术实现
代码
全局事务和局部事务
局部事务
单机事务,即单个数据库。
局部事务就是单机单库事务。
全局事务
多机,多个数据库,即多机多库;分布式服务。
全局事务就是分布式事务。
参考
www.hollischuang.com/archives/16…