深入理解数据库“事务”

一:事务的概念:

“事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败.在不同的环境中,都可以有事物,对应在数据库中就是数据库事物。

二:事物的使用:

(1)开启事物:  start transaction
(2)执行多条SQL语句
(3)回滚或提交:  rollback/commit
注:rollback即是全部失败,commit即是全部成功


事务把多个sql打包到一起,作为一个整体来执行,这样的特点成为”原子性“。

三:事务的意义所在:

为何要使用事务呢?这里我们举一个例子。比如小的时候还没有微信和支付宝,那个时候只能通过银行转账来打钱,比如小明的爸爸要给小明打钱,当小明爸爸去银行给小明转钱时,小明爸爸的账户余额减去了500,而小明的账户余额没有增加500,那这个时候小明的爸爸就需要找银行柜台去处理此事,MySQL中为了避免这种事情的发生就引入了”事务“,这里可以解释为:将小明爸爸的账户余额减去500与小明的账户余额增加500打包为一个事务,如果小明爸爸的账户余额减去了500,而小明的账户余额没有增加500,那么直接回滚,即全部失败也就不用担心转错账户了,这便是事务的意义所在。

注:rollback一般是要搭配一些条件判断逻辑来使用的,SQL也能支持例如条件、循环、变量、函数.......(但是日常开发一般不会这么写),更多的是搭配其他的编程语言。

四:rollback回滚如何完成:

rollback回滚是通过日志的方式,记录事务中的关键操作,这样的记录就是回滚的依据。

注:日志一般是打印出来的内容,一般在文件里,即使是主机掉电,也不影响(回滚用的日志已经在文件中了)一旦重新启动主机,mysql也重新启动,就会发现回滚日志中有一些需要进行回滚的操作.于是就可以完成这里的回滚了。

五:事务的各个特性:

事务不仅仅有原子性特性,还有一些其他方面的特性.

(1)原子性:通过回滚的方式,保证这一系列操作,都能执行正确,或者恢复如初。

(2)一致性:事务执行之前和之后,数据都不能离谱,很多时候是要靠数据库的约束以及一系列检查机制来完成的。

(3)持久性:事务做出的修改,都是在硬盘上持久保存的。

(4)隔离性:(数据库并发执行多个事务的时候,涉及到的问题)隔离级别,就是在"数据正确"和效率"之间做权衡。

六:并发执行数据事物时可能会出现的问题

(1)脏读问题
一个事务A正在写数据的过程中,另一个物务B读取了同一个数据,接下来事物A又修改了数据,导致事务B之前读到的数据,是一个无效的数据/过时的数据(也称脏数据)

解决问题:解决脏读问题的核心思路为针对写操作上锁(写完之前不让读)

(2)不可重复读问题
并发执行事务过程中,如果事务A在内部多次读取同一个数据的时候,出现不同的情况,这种就是不可重复读。事务A在两次读取之间,有一个事务B修改了数据并提交了事务.

解决问题:解决不可重复读,需要给读操作加锁-(事务B读的时候,事务A也不能写)

(3)幻读问题
一个事物A执行过程中,两次的读取操作数据内容虽然没改变,但是结果集变了,这种称为幻续

解决问题:引入串行化的方式,解决幻读,保持绝对的串行执行事物

 注:不同的业务场景中.关注的点是不同的.使用数据库也一样,有的时候希望效率最高,有的时候希望准确性最高。
mysql提供了"隔离级别"概念.可以直接在mysql配置文件中修改数据库的隔度级别.

七:四种隔离级别

 四种隔高级别,对应到上述的三个问题

 read uncommitted(读未提交):并发程度最高,速度最快.隔离性最低,准确性最低。

 read committed(读已提交):引入了写加锁,只能读取写完之后提交的版本,并发程度降低了,速度     降低了,隔离性提高了,准确性提高了。

 repeatable read(可重复读):引入了写加锁和读加锁,写的时候不能读,读的时候也不能写。并发      程度进一步降低了,速度降低了,隔离性提高了,准确性也提高了。

  serializable(串行化):严格的按照串行的方式,一个一个的执行事务。并发程度最低(没有并发),速      度最低,隔高性最高,准确性最高。

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值