没有合适的资源?快使用搜索试试~ 我知道了~
首页MySQL事务详解:场景、特性、InnoDB锁与死锁
MySQL的事务与锁解析是一篇深入探讨MySQL数据库中事务处理和锁定机制的长篇文章,共计五个主要部分。首先,文章介绍了事务的基本概念,其在项目开发中尤其重要,如在涉及转账、订单操作时,确保所有操作要么全部成功,要么全部失败,以保证数据的一致性和完整性。 事务定义包括两个关键特征:一是作为数据库操作的基本工作单元,不可分割;二是由一组SQL语句组成,如插入、删除和更新。MySQL的InnoDB和NDB存储引擎支持事务,InnoDB是默认的事务支持引擎,其原子性通过undolog实现,保证数据在失败时能回滚到事务开始前的状态。 事务的四大特性是原子性、一致性、隔离性和持久性。原子性确保操作要么全部完成,要么全部回滚,如转账过程中转账金额的完整一致性。一致性则关注数据的完整性,如主键唯一性和用户自定义约束。隔离性防止并发操作间的干扰,保证多个事务之间的透明性。 接下来,文章详细剖析了InnoDB中的锁机制,包括锁的粒度(例如共享锁和排他锁)、意向锁的作用以及不同类型的锁算法,如记录锁、间隙锁和临键锁。这些锁策略对于管理并发访问和避免数据冲突至关重要。 最后,文章深入探讨了死锁的问题,包括锁的释放和阻塞机制,死锁的发生条件、检测方法,以及如何通过查看锁信息和采取预防措施来避免死锁。这在高并发环境下,确保数据库性能和稳定性方面显得尤为重要。 这篇文章提供了一个全面的指南,帮助读者理解MySQL中的事务概念、事务特性、InnoDB锁的运作以及如何管理和避免死锁,这对于数据库管理员和开发人员理解和优化数据库性能具有很高的实用价值。
资源详情
资源推荐
MySQL的事务与锁解析的事务与锁解析
本文本文8500多字,多字,5个大目录个大目录一、什么是事务1. 使用场景2. 事务定义3. 哪些存储引擎支持事务4.事务的四大特性5.提交和回滚事务6. 事务并发带来了什么问题7. 隔离级别8. MySQL对
InnoDB的支持9. 一致性两种实现方案二、InnoDB的锁1. 锁的粒度2. 共享锁3. 排它锁4. 意向锁三、锁的原理那么又有两个问题???四、锁的算法1. 记录锁2. 间隙锁3. 临键锁4. 隔离
级别的实现五、死锁1. 锁的释放和阻塞2. 死锁的发生和检测3. 查看锁的信息4. 死锁的避免
一、什么是事务一、什么是事务
1. 使用场景使用场景
项目里面,比如有涉及到转账、操作订单之类的,我们需要让这些操作在一个事务里面完成,这些操作要么全部成功,要么全部失败要么全部成功,要么全部失败,不可能再一个事务里面出现A操作成功,B操作
失败的情况。
2. 事务定义事务定义
百科显示:事务是数据库操作系统执行过程中的一个逻辑单位,由一系列的数据库操作序列组成。
有两个要点:
第一它是数据库最小的工作单元,是不可再分的第一它是数据库最小的工作单元,是不可再分的
第二它包含了一系列的操作语句,比如第二它包含了一系列的操作语句,比如insert,,delete,,update
3. 哪些存储引擎支持事务哪些存储引擎支持事务
MySQL的的InnoDB,另外一个就是NDB。
下面是MySQL官网的存储引擎对比。
4.事务的四大特性事务的四大特性
原子性(Atomicity),一致性(Consistency),隔离性(Isolation),永久性(Durability)
原子性原子性:也就是我们所说的不可再分,我们对数据库的一系列操作要么全部成功,要么全部失败,比如转账,不可能出现A账户余额减少,B账户余额没变化,全部成功就万事大吉,
如果其中某一步失败就必须要事务回滚。
原子性在InnoDB里面是通过undo log实现的实现的,它记录了数据修改之前的值,是以逻辑日志的形式,如果发生回滚,就可以通过undo log来实现。
一致性一致性:指的是数据库的完整性约束没有被破坏数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态事务执行的前后都是合法的数据状态。比如主键必须是唯一的,字段长度符合要求。
除了数据库自身的完整性约束,还有一个是用户自定义的完整性。比如转账前和转账后的金额总数应该是不变的,不可能出现A扣除了1000元,B只接收了500元。
隔离性隔离性:数据库里面会有很多的事务同时去操作我们的同一张表或者同一行数据,必然会产生一些并发或者干扰的操作,那么我们对隔离性的定义,就是这些很多个的事务,对表或
者行的并发操作,应该是透明的,互相不干扰的。通过这种方式,我们最终也是保证业务数据的一致性,表明事务必须是相互独立的,不应该依赖或者影响其他事务。表明事务必须是相互独立的,不应该依赖或者影响其他事务。
持久性持久性:我们对数据库的任意的操作,增删改,只要事务提交成功,那么结果就是永久性的,不可能因为我们系统宕机或者重启了数据库的服务器,它又恢复到原来的状态了。这个
就是事务的持久性。事务完成后,对数据的修改永久保存到数据库和磁盘。事务完成后,对数据的修改永久保存到数据库和磁盘。
持久性是通过 redo log 和和 double write 双写缓冲来实现的,我们操作数据的时候,会先写到内存的 buffer pool 里面,同时记录 redo log,如果在刷盘之前出现异常,在重启后就可
以读取 redo log 的内容,写入到磁盘,保证数据的持久性。当然,恢复成功的前提是数据页本身没有被破坏,是完整的,这个通过双写缓冲(double write)保证。
5.提交和回滚事务提交和回滚事务
不论我们是在数据库连接工具或者Java代码里面,最终都是发送一个指令到数据库执行,工具和代码不过是把命令给封装了。
InnoDB有一个参数就是有一个参数就是autocommit,就是是否自动提交的意思,就是是否自动提交的意思。它有两个级别,session和global。
show variables like ‘autocommit’;默认值是ON,如果是OFF或者false就是关闭自动提交,需要我们手动提交事务。如果是ON或者true就是自动提交事务。
手动提交事务有两种,一种是begin,一种是start transaction
结束事务也有两种,一种是提交事务commit,一种是回滚rollback
还有一种情况,当客户端连接断开时,事务也会自动结束。
6. 事务并发带来了什么问题事务并发带来了什么问题
下载后可阅读完整内容,剩余5页未读,立即下载
weixin_38653385
- 粉丝: 2
- 资源: 942
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功