【MySQL事务_1_事务的简单理解】

一、事务定义

  • 事务:事务是一个最小的不可在分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务是一个最小的工作单元)
  • 一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成。
  • 事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同。

二、转账操作理解事务

我们来看一个真实的转账业务,表名为t_act(账户、余额),用户1需要向用户2转账100元

actno      balance
1          500
2          100

进行转账操作

update t_act set balance=400 where actno=1;
update t_act set balance=200 where actno=2;
以上两台DML语句必须同时成功或者同时失败。最小单元不可再分,当第一条DML语句执行成功后,
并不能将底层数据库中的第一个账户的数据修改,只是将操作记录了一下;
这个记录是在内存中完成的;当第二条DML语句执行成功后,和底层数据库文件中的数据完成同步。
若第二条DML语句执行失败,则清空所有的历史操作记录,要完成以上的功能必须借助事务

三、事务的四大特性

1.原子性(A):指一个事物是一个不可分割的工作单位,其中的操作要么都成功,要么都失败.
当事务发现有些语句不能执行时,需要将数据恢复到事务执行前,通过undo log实现。

undo log是mysql中比较重要的事务日志之一,顾名思义,undo log是一种用于撤销回退的日志,
在事务没提交之前,MySQL会先记录更新前的数据到 undo log日志文件里面,
当事务回滚时或者数据库崩溃时,可以利用 undo log来进行回退。

2.持久性(I): 指事务一旦提交,它对数据库的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

持久性问题的产生:
背景:Mysql为了保证存储效率,每次读写文件都是先对缓存池(Buffer Pool)操作,
      缓冲池再定期刷新到磁盘中(这一过程称为刷脏)。
产生:由于数据不是直接写到磁盘,那么如果主机断电,就会有一部分数据丢失。
解决:通过重做日志(redo log)恢复数据。在每次修改数据之前,
      都会将相应的语句写到redo log中,如果主机断电,那么再次启动时可通过redo log回复。
拓展:redo log也需要在事务提交时将日志写入磁盘,它比缓冲池写入快的原因有两点:
      redo log是追加文件写,属于顺序IO,缓冲池是属于随机IO,且刷脏是以页为单位,
      有一点修改就要整页写入。

3.隔离性(D): 隔离性是指,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

与原子性、持久性侧重于研究事务本身不同,隔离性研究的是不同事务之间的相互影响。
下边讲到的事务并发问题就是隔离性的问题,MVCC就是解决这些问题的。

4.一致性©:指事务执行结束后,数据库的完整性约束没有被破坏,开始1000块钱,后面转账结束了,也得是1000块钱。

实现:前面提到的原子性、持久性和隔离性,都是为了保证数据库状态的一致性。

四、和事务相关的术语

开启事务:Start Transaction
事务结束:End Transaction
事务提交: Commit Transaction
事务回滚: Rollback Transaction

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值