当前位置:网站首页>MySQL关系型数据库事务的ACID特性与实现方法
MySQL关系型数据库事务的ACID特性与实现方法
2022-08-01 17:56:00 【亿速云】
MySQL关系型数据库事务的ACID特性与实现方法
这篇文章主要介绍“MySQL关系型数据库事务的ACID特性与实现方法”,在日常操作中,相信很多人在MySQL关系型数据库事务的ACID特性与实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL关系型数据库事务的ACID特性与实现方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
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})此外,还有嵌套事务以及手动事务等操作,可以参考中文文档:Go GORM 事务详细介绍
4. Spring 事务的使用
public class AClass { @Transactional(rollbackFor = Exception.class) public void aFunction() { //todo: 数据库操作A(增,删,该) }}@Transactional 注解必须添加在public方法上,private、protected方法上是无效的。
一般情况下,推荐将@Transactional 注解加在方法上,因为@Transactional直接加在类或者接口上,@Transactional注解会对类或者接口里面所有的public方法都有效,会影响性能。
到此,关于“MySQL关系型数据库事务的ACID特性与实现方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
边栏推荐
猜你喜欢
随机推荐
QT常用全局宏定义
bat 批示处理详解-2
一加OnePlus 10RT出现在Geekbench上 产品发布似乎也已临近
tooltip control
8月微软技术课程,欢迎参与
MySql 怎么查出符合条件的最新的数据行?
SQL的ROUND函数用法及其实例
云商店携手快报税,解锁财务服务新体验!
MySQL Lock wait timeout exceeded; try restarting transaction 锁等待
浅谈大数据背景下数据库安全保障体系
浅谈游戏音效测试点
缓存一致性MESI与内存屏障
完美指南|如何使用 ODBC 进行无代理 Oracle 数据库监控?
力扣每日一题-第45天-697. 数组的度
表达式;运算符,算子;取余计算;运算符优先顺序
块级元素、行内元素、行内块元素
CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) Solution
【Error】Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘concat’)
晶振工作原理详解
解决MySQL插入不了中文数据问题








