MySQL事务(transaction)

文章讲述了在处理银行数据库中的并发操作时,事务如何解决并发问题和操作失败,强调了事务的原子性、一致性、隔离性和持久性。讲解了如何在MySQL中开始、执行和管理事务,如STARTTRANSACTION、UPDATE和COMMIT/ROLLBACK。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么要引入事务的概念:

假设有一个银行数据库,其中包含用户账户信息和账户余额。用户可以执行存款和取款操作。如果没有事务的支持,以下情况可能会发生问题:

并发问题: 假设有两个用户同时尝试从同一个账户中取款,而账户余额只有足够一次取款的钱。如果不使用事务,两个操作可能会交叉执行,导致账户透支。
操作失败问题: 假设用户执行了存款和取款操作,但在存款后发生了错误导致取款操作失败。如果没有事务支持,存款操作会保留,账户余额将不正确,用户的资金可能会丢失。

通过引入事务,以上问题可以得到解决。例如,用户执行存款和取款操作时,这两个操作会被包装在一个事务中。如果取款操作失败,整个事务会被回滚,包括之前的存款操作,确保账户余额的一致性。如果所有操作都成功,事务会被提交,账户余额更新。

事务(Transaction)是一组操作的集合,他是不可分割的工作单位。事物会把所有操作视为一个整体一起向系统提交或撤销操作请求,这些操作要么同时成功,要么同时失败

默认MySQL的事务是自动提交的,也就是说,当执行一个DML语句,MySQL会立即隐式的提交实物。

开启事务:start transaction;/begin;
提交事务:commit;
回滚事务:rollback;

事务四大特性:

原子性(AStomicity):事务是不可分割的最小单元,要么全部成功,要么全部失败
一致性(Consistency):事务完成时,所有数据都必须保存一致的状态;
隔离性(Isolaction):各个事务的操作相互隔离,一个事务的操作在提交之前对其他事务是不可见的。这确保了并发事务的执行不会相互干扰。
持久性(Durabiliy):事务一旦提交或回滚,它对数据库中的数据改变就是持久的。

-- 开始事务
START TRANSACTION;

-- 减少转出账户余额
UPDATE accounts
SET balance = balance - 100
WHERE account_id = 1;

-- 增加转入账户余额
UPDATE accounts
SET balance = balance + 100
WHERE account_id = 2;

-- 提交事务
COMMIT;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZATuTu丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值