MySql事务杂谈

447 阅读2分钟

这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战

快速温习之前的知识

事务的实现:

  • 原子性、一致性、持久性是通过redo logundo log来实现的
  • redo log来保证原子和持久性
  • undo log来保证一致性

分布式事务

  • InnoDB主要通过的是XA事务去实现分布式事务
  • 分布式事务就是可以多个独立的事务资源(关系型数据库系统/全局事
  • 值得注意的是:在用分布式事务的时候必须隔离级别是可串行化SERIALIZABLE
  • XA事务强大在于,A台服务器是Mysql的、B是Oracle的、C是SQL Server
  • 只要上面三台服务器参与全局事务中的每个节点都支持XA事务
  • 比如小王在北京给沈阳的小李转一百块钱
# BeiJing
update account set money = money - 100 where name = 'xiaowang'
# ShenYang
update account set money = money + 100 where name = 'xiaoli'
  • 在这过程中,必须保每一个节点都不能出现问题,否则就会全部回滚/提交

XA事务

  • XA事务由一个或多个资源管理器一个事务管理器以及一个应用程序组成。
  • 资源管理器:提供访问事务资源的方法。通常- -个数据库就是一个资源管理器。
  • 事务管理器:协调参与全局事务中的各个事务。需要和参与全局事务的所有资源 管理器进行通信。
  • 应用程序:定义事务的边界,指定全局事务中的操作。

分为两个阶段

  1. 所有全局事务的节点开始准备
  2. 保证所有事务原子,要么回滚要么提交

事务级别杂谈

  • InnoDB存储引擎默认支持的隔离级别是RR
  • InnoDB存储引擎在RR事务隔离级别下,使用Next-Key Lock锁的算法,避免幻读
  • 所以InnoDB 存储引擎在默认的RR的级别下已经能完全保证事务的隔离性要求,相当于SQL标准的SERIALIZABLE(可串行化)隔离级别。
  • 隔离级别越低,事务请求的锁越少或保持锁的时间就越短。

回顾

  • 事务必须遵循ACID特性,Atomicity(原子性).Consistency(--致性).Isolation(隔离性)和Durability(持久性)。隔离性通过
  • 默认配置下,MySQL数据库总是自动提交的
  • COMMIT、ROLLBACK操作交给程序端来完成,而不是在存储过程内完成。在完整