MySQL事物

所谓事物,就是将一组相关操作组合为一个要么全部成功要么全部失败的单元,确保除非事物性单元的所有操作都成功完成,否则不会永久更新面向数据的资源,可以简化错误恢复并使应用程序更加可靠。(用转账来举例:当A执行一个向B转账500元钱的操作时,数据库中要执行的是A总钱减少500元并加以显示,而B的数据库要增加500元并显示出增加后的结果,这样才能说该事物的完成)。一个逻辑工作单元要完成事物,往往必须满足事物的四大特性(ACID原则)。


  • 原子性(Atomicity):

事物的完成要么完全成功,要么就回滚。只有事物中所有的数据库操作都执行成功,才算整个事物成功。对数据库要么是完全正确的,要么就不记录任何数据。

  • 一致性(Consistency):

事物发生前后,数据库只能此从一致性的一个状态转换为另一个一致性的状态;在事物开始之前和结束之后,数据库的完整性约束没有被破坏。

  • 隔离性(lsolation):

多个事物并发操作时,事物之间不会相互影响;每一个读写事物的对象对其他事物的操作对象相互分离,即事物提交之前,对其他事物都不可见(实现方法:锁)

  • 持久性(Durability):

一旦事物提交,数据就会持久化在数据库中,不可能再被回滚的,执行成功后就会全部写入磁盘。

 

### MySQL 事务的概念与使用 #### 什么是事务? 在数据库系统中,事务是一组操作单元,这些操作要么全部完成,要么完全不执行。通过这种方式,事务能够保证数据的一致性和完整性[^3]。 #### 事务的 ACID 属性 事务具有四个核心特性,通常被称为 **ACID** 特性: - 原子性 (Atomicity): 事务是一个不可分割的工作单位,其中的操作要么全做,要么全不做。 - 一致性 (Consistency): 数据库状态始终从一个一致的状态转换到另一个一致的状态。 - 隔离性 (Isolation): 多个并发事务之间互不影响。 - 持久性 (Durability): 已提交的事务更改会永久保存在数据库中。 #### 如何开启事务? 在 MySQL 中,可以通过 `START TRANSACTION` 或者 `BEGIN` 来显式地启动一个事务。例如: ```sql START TRANSACTION; -- 或者 BEGIN; ``` 上述命令用于标记事务的起点[^2]。 #### 提交或回滚事务 当事务中的所有操作都成功完成后,可以使用 `COMMIT` 将其持久化;如果发生错误,则可使用 `ROLLBACK` 进行撤销。示例如下: ```sql COMMIT; -- 完成并保存事务 ROLLBACK; -- 取消未完成的事务 ``` #### XA 事务简介 XA 是分布式事务的标准协议之一,在 MySQL 中支持两阶段提交(Two-phase Commit)。这种机制允许跨多个资源管理器协调全局事务。具体流程包括准备阶段和提交阶段[^1]。 ##### 简单的例子演示 下面展示了一个简单的本地事务处理过程以及如何利用 XA 协议实现更复杂的场景。 ###### 示例:基本事务 假设有一个银行转账业务逻辑如下所示: ```sql START TRANSACTION; UPDATE account SET balance = balance - 100 WHERE user_id = 1; -- 用户 A 减少余额 UPDATE account SET balance = balance + 100 WHERE user_id = 2; -- 用户 B 增加余额 COMMIT; ``` 在这个例子中,两个更新语句被包裹在一个事务里,只有两者均成功才会真正生效。 ###### 示例:XA 分布式事务 对于涉及多台服务器的情况,可能需要用到 XA 语法来进行同步控制。以下是伪代码形式表示的一个典型用例: ```sql XAR START 'transaction-id'; -- 启动一个新的 XA 事务分支 INSERT INTO table_name (...) VALUES (...); -- 执行某些 DML 操作 XAR END 'transaction-id'; XAR PREPARE 'transaction-id'; -- 如果其他参与节点也准备好之后... XAR COMMIT 'transaction-id'; ``` 这里需要注意的是实际部署环境下的配置细节可能会有所不同,请参照官方文档进一步学习。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bearx...

请作者喝杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值