当前位置:网站首页>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特性与实现方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
边栏推荐
- OpenCV installation, QT, VS configuration project settings
- 缓存一致性MESI与内存屏障
- tooltip 控件
- 研发团队数字化转型实践
- MySQL 45 讲 | 09 普通索引和唯一索引,应该怎么选择?
- GRUB2的零日漏洞补丁现已推出
- 【报错】Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘concat‘)
- 统信软件、龙芯中科等四家企业共同发布《数字办公安全创新方案》
- CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) Solution
- QT_QThread thread
猜你喜欢
随机推荐
md5sum源码 可多平台编译
QPalette调色板、框架色彩填充
关于单应性矩阵的若干思考
8月微软技术课程,欢迎参与
一加OnePlus 10RT出现在Geekbench上 产品发布似乎也已临近
【100个网络运维工作者必须知道的小知识!】
中信证券是国内十大券商吗?怎么开户安全?
食品安全 | 新鲜食品vs速食食品,哪一种是你的菜?
QLineEdit学习与使用
M1芯片电脑安装cerebro
[供应链·案例篇]石油和天然气行业的数字化转型用例
XAML WPF项目groupBox控件
开发工具:第五章:使用idea生成实体类
基于ORB-SLAM2的改进代码
SRM供应商管理系统如何助力口腔护理企业实现采购战略的转型升级
QT_QThread线程
直播系统聊天技术(八):vivo直播系统中IM消息模块的架构实践
bat 批示处理详解-2
SQL窗口函数
B011 - 51-based multifunctional fingerprint smart lock