数据库:事务(个人大白话详讲)

场景:支付宝里,A用户向B用户转账一笔钱,那么A用户的转出操作和B用户的接受操作就需要封装为一个事务了

一、什么是事务?
1,定义:数据库事务访问(读)并可能更新(写)数据库中各种数据项的一个执行单元

2,组成:一个数据库事务通常包含对数据库进行的一个操作序列

3,目的:

  • 为数据库提供了一个从失败中恢复到正常的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法
  • 当多个应用程序在并发访问数据库时,可以这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

总结~~~事务的目的就是要提供三种方法:

  • ①失败恢复方法
  • ②保持一致性的方法
  • ③操作隔离的方法

三种情况下:

  • 成功情况下:能将数据从一种状态变为另一种状态,并能够持久化。
  • 异常情况下:①能将数据恢复到正常状态(解释:数据库中数据为 10,一个事务执行加一操作,操作结果为11,若提交时发生了异常,则应该回滚到初始状态10) ②要能保持一致性,包含数据的一致性和约束的一致性(解释:有学生表和选课表,学生01的成绩时90,学生02的成绩是80。数据一致性是指对学生01进行操作发生异常后进行回滚,回滚后不仅学生表中学生01的不变,其对应的选课表中学生01的成绩应该是90,保持不变。约束一致性是指若对学生表中新注册一个学生03,也要对应插入一条选课信息,若异常了,则要保证学生表和选课表都没有03的信息,若成功了,则应该都有,不能出现一个有一个没的情况 )
  • 并发情况下:并发的操作之间不能产生相互影响

二、事务的特性 ACID (事务的特性源于事务的目的 )
1,原子性:事务作为一个整体被执行,包含在其中的对数据的操作要么全部被执行,要么都不执行
2,一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
3,隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
4,持久性:一个事务一旦提交,他对数据库的修改应该永远保存在数据库中

三、事务的并发异常:

  • 回滚丢失(第一类更新丢失):如数据库中数据为10,有两个事务。第一个事务进行访问操作结果为10,第二个事务进行访问操作结果为10,第一个事务加一操作结果为11,第二个事务加二操作结果为12,第一个事务提交使数据库中数据变为 11,第二个数据在提交过程中发生异常进行回滚,由于第一个事务已经提交,所以第二个事务回滚后为11,不是10,叫做回滚丢失 。
  • 覆盖丢失(第二类更新丢失):如数据库中数据为10,有两个事务。第一个事务进行访问操作结果为10,第二个事务进行访问操作结果为10,第一个事务加一操作结果为11,第二个事务加二操作结果为12,第一个事务提交使数据库中数据变为 11,第二个事务提交使数据库中数据变为 12,最终结果就变为12,覆盖了第一个事务的结果11。
  • 脏读:一个事务读取了另一个事务修改了还未提交的数据,但另一个事务后又发生了回滚,导致这个事物读到了一个失效数据,并在这个失效数据的基础上进行操作。
  • 不可重复度:一个事务对同一行数据执行了两次或更多次查询,但是查询到的结果不一致。
  • 幻读:幻读和不可重复读很像,只是针对的不是数据的值而是数据的数量。

四、事务隔离级别(按从低到高的隔离级别分为四类)

  • 读未提交:即使一个事务的更新语句没有提交,但别的事务可以读到这个改变。
  • 读已提交:指一个事务只能看到其他事务的已经提交的更新,消除了脏读和回滚丢失,是大多数数据库的默认级别,如Oracle,Sqlsever
  • 可重复读:指一个事务中进行两次或多次对于同一行数据内容的查询,得到的结果一样,但不保证对数据条数的查询是一样的,只要存在读改行数据就禁止写,消除了不可重复读和覆盖丢失。是Mysql的默认隔离级别。
  • 串行化:完全串行化的读,只要存在读就禁止写,但可以同时读,消除了幻读。
    总结:
    在这里插入图片描述

实操:
使用begin或者start transaction开始一个事务
rollback 事务回滚
commit 事务确

set autocommit=0 禁止自动提交
ser autocommit=1 开启自动提交

最终成功后commit手动提交

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值