美文网首页Java 程序员Java
关系型数据库事务的ACID特性与实现

关系型数据库事务的ACID特性与实现

作者: 马小莫QAQ | 来源:发表于2022-06-29 17:12 被阅读0次

1、事务的 ACID 特性详

ACID 是为保证事务(transaction)是正确可靠的,所必须具备的四个特性:

  • 原子性(Atomicity):事务中的操作同时成功或者失败。
  • 一致性(Consistency):数据库事务不能破坏数据的完整性以及业务逻辑上的一致。
  • 隔离性(Isolation):一个事务不影响其他事务的运行效果。
  • 持久性(Durability):事务完成后,事务所做的修改应该持久的保存在数据库中,不会被回滚。

以 A 给 B 转账100元为例:

  • 原子性:A 失去100元与 B 收到 100 元同时发生。
  • 一致性:A 的账户在失去100元后不能为负数。
  • 隔离性:A 账户在执行该事务的同时如果执行 B 事务失去1元,那么最终应为失去101元,两者互不影响。
  • 持久性:A 的账户失去100元后就不能要回来了。

2、MySQL 事务的实现

MySQL事务是由 InnoDB 存储引擎实现的。

可以用如下的命令显式的开启事务:

start transaction / (Begin);
#一条或多条sql语句
Commit;

另外,在自动提交(autocommit)模式下,我们执行的每一条 SQL 语句都是一条独立的事务;如果关闭了自动提交(autocommit)模式,则所有的 SQL 语句都在一个事务中,直到执行了 commit 或 rollback,该事务结束,同时开始了另外一个事务。

MySQL 事务的 ACID 特性靠如下机制实现:

  • 原子性:undo log,逻辑日志,记录 SQL 执行相关的信息。当发生回滚时,InnoDB 会根据 undo log 的内容做与之前相反的工作
  • 持久性:redo log,当事务提交时,会调用fsync接口对redo log进行刷盘。
  • 隔离性:锁机制与 MVCC。
  • 一致性:数据库本身的设计。

3、Gorm 事务的使用

Go 语言的 Gorm 提供了对于事务操作的支持:

db.Transaction(func(tx *gorm.DB) error {
  // 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db')
  if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
    // 返回任何错误都会回滚事务
    return err
  }

  if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {
    return err
  }

  // 返回 nil 提交事务
  return nil
})

此外,还有嵌套事务以及手动事务等操作,可以参考中文文档:learnku.com/docs/gorm/v…

4、Spring 事务的使用

public class AClass {

    @Transactional(rollbackFor = Exception.class)
    public void aFunction() {
        //todo: 数据库操作A(增,删,该)
    }
}

@Transactional 注解必须添加在public方法上,private、protected方法上是无效的。

一般情况下,推荐将@Transactional 注解加在方法上,因为@Transactional直接加在类或者接口上,@Transactional注解会对类或者接口里面所有的public方法都有效,会影响性能。

作者:树獭叔叔
链接:https://juejin.cn/post/7114326386487230478
来源:稀土掘金

相关文章

  • 简介事务ACID的实现机制

    一、概述 事务的ACID特性是关系型数据库的重要特点,在很多领域有着重要作用。本文试图介绍下事务ACID的实现机制...

  • 分布式基础-BASE理论

    前言 我们聊到关系型数据库,常谈的是事务,谈的是事务特性ACID。根据CAP,我们分布式共享数据的系统,要实现CP...

  • Redis

    事务 Redis的事务和Mysql等关系型数据库不太愿意,没有ACID特性。 它先以MULTI开始一个事务, 然后...

  • 05.白话MySQL MVCC

    事务特性 大家都知道关系型数据库事务的特性:ACID 不同的隔离级别,存在着不同问题 MySQL默认的隔离级别是R...

  • 关系型数据库事务的ACID特性与实现

    1、事务的 ACID 特性详 ACID 是为保证事务(transaction)是正确可靠的,所必须具备的四个特性:...

  • java基础面试题总结——数据库

    1. 数据库事务4大特性(ACID), 数据库事务4大特性(ACID): 1.原子性(Atomicity): 事务...

  • 数据库MongoDB

    1. 关系型数据库 四个特性(ACID): A(Atomicity)原子性事务的所有操作要么全部做完,要么都不做。...

  • MySQL(三) MySQL事务和锁

    1. ACID 在关系型数据库管理系统中,一个逻辑工作单元要成为事务,必须满足这 4 个特性,即所谓的 ACID:...

  • mac os 安装redis

    Redis: 特点:(不适合处理关系型数据库的事务acid特性) 1、数据的持久化 2、支持list、set、zs...

  • 技术解读 | PolarDB-X 分布式事务的实现

    作者:光气 背景 ACID 事务是关系型数据库一个重要的特性,也是 NewSQL 数据库最大的挑战之一。在 Pol...

网友评论

    本文标题:关系型数据库事务的ACID特性与实现

    本文链接:https://www.haomeiwen.com/subject/ykfxbrtx.html