【数据库】MySQL事务(通俗易懂)

 🔥博客主页: 我要成为C++领域大神

🎥系列专栏【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】

❤️感谢大家点赞👍收藏⭐评论✍️

本博客致力于分享知识,欢迎大家共同学习和交流。

定义

事务是数据库中执行的一个逻辑工作单元,它由一个或多个数据库操作组成,这些操作要么全部执行成功,要么全部回滚(撤销)。事务确保数据库中数据的一致性和完整性,并且在并发访问情况下保持数据库的可靠性。

使用场景:

事务通常在需要确保数据的一致性、完整性和可靠性的场景中使用。

  1. 银行交易: 在银行系统中,转账操作通常涉及从一个账户中扣除金额并将其添加到另一个账户中。在这种情况下,使用事务可以确保转账操作的原子性,即要么转账操作完全成功,要么完全失败,避免了资金损失或不一致的账户余额。
  2. 电子商务订单处理: 在电子商务系统中,处理订单涉及到多个步骤,包括减少库存、生成订单记录、扣款等。使用事务可以确保这些操作的一致性,即要么订单处理全部成功,要么全部回滚,避免了库存错误或资金损失。
  3. 在线预订系统: 在酒店预订、机票预订等在线预订系统中,用户提交预订请求后,系统需要从库存中减少相应的数量,并生成订单记录。使用事务可以确保这些操作的一致性和完整性,避免了库存错误或订单丢失。
  4. 社交媒体应用中的帖子发布: 在社交媒体应用中,当用户发布帖子时,需要将帖子内容保存到数据库中,并更新用户的发布统计信息。使用事务可以确保这些操作的原子性,避免了数据不一致或错误的统计信息。
  5. 管理系统中的批量处理: 在管理系统中,批量处理操作可能涉及多个数据表或多个数据修改步骤。使用事务可以确保这些操作的一致性和完整性,避免了数据不一致或操作错误。

事务的使用案例

在银行系统中,B问A借钱。
我们先创建一个账户表:

create table bank(
name varchar(10),
money double not null,
CHECK(money >=0)      #CHECK在mysql中无效
)

插入两行数据

insert into bank values('A','100');
insert into bank values('B','0');

若B向A借50元,则需要执行sql语句:

update bank set money=money-50 where name ='A';
update bank set money=moneY+50 where name ='B';

如果不开启事务,那么sql语句是一句一句执行的。若出现了网络问题,导致只执行了第一句sql,第二句没有执行,那么这个系统就无法保证借钱操作正常完成,并且影响银行系统正常过程。

因此为了使得两个sql语句要么都成功,要么都失败,我们需要开启事务

如何使用事务

开启事务
start transaction
开启事务之后,执行我们的sql语句,可以保证都成功或者都失败。
 

当我们执行完成后,需要确认结果是否是我们想要的
如果是,提交:commit
如果不是,回滚:rollback

在上述银行表中,我们尝试开启事务:
执行操作前的bank表:
 


开启事务:
 


执行借钱的sql语句:

如果此时我们关闭MySQL,重新打开,我们可以看到bank表回到了执行之前的数据。
而如果开启事务,执行sql语句后提交,就可以执行成功了。若是回滚,就回到了执行之前的数据。

事务的特性(ACID)
 

  1. 原子性(Atomicity): 事务是作为最小工作单位,不可再分,要么都执行,要么都不执行
  2. 一致性(Consistency): 数据库的完整性约束不能被破坏
  3. 隔离性(Isolation):多个并行执行的事务是隔离的,相互之间不影响
  4. 持久性(Durability): 事务提交以后,数据持久保持性能在本地。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值