| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> MySQL事务和锁 -> 正文阅读 |
|
[大数据]MySQL事务和锁 |
1.事务1.什么是事务?事务: 要么全部成功,要么全部失败
支持事务的引擎: InnoDB、NDB 2.事务的四大特性是啥?ACID: 最终目的——保证数据的一致性。 原子性(Atomicity): 事务是不可分割的工作单位,DML语句要么全部成功,要么全部失败。 一致性(Consistency): 事务执行前后,数据库中的数据必须保持一致。 隔离性(Isolation): 多用户并发访问数据库时,每个用户之间的操作不会相互影响。 持久性(Durablity): 事务一旦被提交,它对数据库的改变就是不可逆的。 3.事务相关操作查看事务开启状态:
关闭事务自动提交:
手动开启事务:
结束事务:回滚或者提交
还有一种结束:使用可视化界面工具执行了一条DML语句,还没回滚或者提交,就把页面关闭了,后台也会结束事务。 事务持有的锁,会在事务结束的时候释放。 4.事务并发带来的问题有哪些?1.脏读脏读(Dirty read): 一个事务读取到了另一个事务 未提交 的数据。 图解:以下为自动提交事务关闭情况 2.不可重复度不可重复度(Non-repeatable read): 一个事务中前后执行两次相同的查询操作,由于第二次读取到了其他事务 已提交 的数据,得到了不同的查询结果。 3.幻读幻读(Phantom)与不可重复度的区别: 由于 插入数据 而导致两次查询结果不一致叫幻读,由于 删改 数据而导致两次查询结果不一致叫不可重复读。 4.小结事务并发的三大问题其实都是数据库 读一致性 问题,必须由数据库提供一定的 事务隔离机制 来解决。 由此,提出了 SQL92 ANSI/ISO标准 5.事务的四个隔离级别读未提交(READ UNCOMMITTED): 可以读取到事务未提交的数据,最低的事务隔离级别。 读已提交(READ COMMITTED): 只能读已提交的数据,解决了脏读。 可重复读(REPEATABLE READ): 一个事务开始读取数据后, 其他事务不能修改数据( 串行化(SERIALIZABLE): 事务一个一个地排队执行,不能进行并发操作,可以避免所有并发问题。但是效率低下,很消耗数据库性能。
事务隔离级别预告,并发度越低。 注意: InnoDB在可重复读级别已经解决了幻读的问题,完全不需要使用到串行化。InnoDB的默认级别是可重复读。 7.如何解决读一致性问题?即,如何保证事务中前后两次读取数据结果一致? 1.LBCC(Lock Based Concurrent Control) : 在读取数据前,对其加锁,阻止其他事务对数据库进行修改 2.MVCC(Multi Version Concurrency Control) : 生成一个数据请求时间点的一致性数据快照(Snapshot),并用这个快照来提供一定级别(语句级或事务级)的一致性读取 2.锁mysql的锁
表锁与行锁的区别:
MyISAM支持表锁
InnoDB 锁类型锁的模式(Lock Mode) 1.行锁● 共享锁(Shared Locks): 行锁 又称 读锁 ,即多个事务对于同一数据共享一把锁,都能访问到数据,但 只能读不能改
● 排他锁(Exclusive Locks): 行锁
意向锁:由数据引擎自己维护的,用户无法手动操作。
即,先由数据库引擎加上IS锁,才能加上共享锁;先由数据库引擎加上IX锁,才能加上排他锁。
2.行锁算法区间的定义: 记录锁(Record Locks): 唯一性索引(唯一/主键)等值查询,精准匹配 间隙锁(Gap Locks): 记录锁不存在 InnoDB中就是通过间隙锁,防止插入的(也就防止了幻读) 临键锁(Next-key Locks): 范围查询,包含记录和区间 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 0:53:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |