数据库事务——概念理解和并发导致问题的解决

数据库——事务概念以及用法

前言

字很多,但是易于理解

1.事务概念

MySQL的事务(Transaction)是一组数据库操作,这些操作要么全部成功执行,要么全部回滚(撤销),以保持数据的一致性和完整性。事务在数据库中被用于处理复杂的操作,例如转账操作、订单处理等,以确保数据的正确性。事务能够将一系列数据库操作(例如插入、更新、删除等)作为一个不可分割的单元来执行。

2.个人理解

我们可以把事务操作理解成维护数据库中数据完整性正确性一种操作方式, 我们把每个sql语句(增删改查等)理解成一个事务,一个不可以再分割的单元,事务操作就是对这些单元进行管理,确定这些语句(事务)的提交方式,比如所有语句都执行成功一起提交还是按顺序提交,请看下面的例子

2.1一个例子解决事务理解问题

A要去转666元给B,会出现以下3个步骤:

  1. 首先A要查询余额,账户剩666块
  2. 其次A的银行账户扣666块钱
  3. 最后B收到666块钱

但是我们试想,如果是写一句语句就进行一次事务提交操作,会不会出现下面的问题:
A通过sql语句查询余额剩666没问题,然后A扣钱666也没问题,但是在把666转给B的时候,系统却报出了异常(上述第三步),由于mysql中 事务/sql 语句是自动提交的(判断一句提交一句的),这导致A判断成功后被扣了钱,但是B判断没有通过,没收到钱,对此我们该怎么办呢?


我们可以通过把事务变为手动提交的方式解决问题,从开始事务语句(start transaction)规定接下来所有事务(sql语句)是一个整体,这样就变成一起提交的了,不会出现数据先后提交的顺序问题了。语句如下

  1. 查看事务是否为自动提交方式
 select @@autocommit;
  1. 设置事务的提交方式——设置事务为主动提交
set @@autocommit=0;#把自动提交关了
  1. 开启事务——规定接下来所有语句是整体成功或者失败的,错一个都不能提交
start transaction;
#或者begin;
  1. 进行事务语句的操作
select accountBalance 账户余额 from account where id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值