| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 大数据 -> MySql事务(Transaction) -> 正文阅读 |
|
|
[大数据]MySql事务(Transaction) |
|
目录 前言之前介绍了mysql的锁,这次介绍一下mysql的事务。我个人觉得锁和事务是在我们工作当中用到最多的。几乎每个开发工程师都会用到。反而那些底层的binlog,redolog,buffer pool 很少在开发过程中用到。这里也会简单介绍一下这些。 一、事务是什么事务是恢复和并发控制的基本单位,是访问并可能更新数据库中各种数据项的一个程序的执行单元。他是一个最小的不可再分的工作单元。 通常一个事务对应这一个完整的业务。比如转账业务员就是一个最小的工作单元。 例:小陈给小张转账100,小陈账户扣减100,小张账户增加100,这种就是一个最小的工作单元,要么都成功,要么都失败。 一个事务可以是一句sql,也可以是一组sql,也可以是整个程序。 二、事务的特性1、原子性(atomicity)一个事务是一个不可分割的工作单位,事务中包括的操作要么都执行,要么都不执行。 ???原子性有undo?log日志来保证,undo?log日志会保存每次变更前的记录,从而在发生错误的时候进行回滚。 ?2、一致性(consistency)事务必须是使数据库从一个一致性状态变到另一个一致性状态。 ???一致性由原子性,隔离性,持久性来保证。 ?3、隔离性(isolation)一个事务的执行不能被其他事务干扰。即一个事务内部的操作即使用数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰 ???隔离性由MVCC机制和Lock锁机制来保证。 ?4、持久性(durability)事务一旦提交,他对数据库中的数据的改变是永久性的。 ???持久性由redo?log日志来保证,在每次修改数据前,数据都是记录在redo?log日志中的,只有redo?log日志写成功,才会往B+树里去写,如果在写B+树时断电了,可以通过redo?log日志来进行恢复写入。 三、事务的开启结束标志开启:insert, update , delete 任意一条这种DML语句就会开启事务 结束:
四、事务的作用为了保证在复杂数据库操作数据的一致性,尤其是在并发访问数据的时候。 mysql事务主要用于处理操作量大,复杂度高的数据。 五、事务的隔离级别1、读未提交(read?uncommitted) 2、读已提交(read commited) 3、可重复读(repeatable read) 4、串行化(serializable) 详细说明 ? ? ? ? 初始数据:
查看当前会话的隔离级别老一点的版本:select @@tx_isolation; 新版本?:?select @@transaction_isolation; 设置隔离级别老一点的版本:set tx_isolation?= ’read-uncommitted’; 新版本?:?set transaction_isolation?=?’read-uncommitted’;
1、读未提交(read?uncommitted)设置隔离级别:set transaction_isolation?= ’read-uncommitted’; ?1)此时客户端A与客户端B都开启事务,且数据都一致。
2)客户端A事务中修改数据,但是并未提交,客户端B的事务中也能够查询到客户端A事务的数据。如果这个时候客户端A的事务回滚,这个时候客户端B查询出来的数据就是脏数据,如果有业务通过这个脏数据处理业务,就会导致后续的数据及业务的错误。
3)客户端B去修改客户端A修改的数据,会被行锁阻塞在那,如果此时客户端A事务rollback,那么客户端B通过balance?= balance+50,则是通过原先的0去加50,在数据库侧不会有问题。如果是在代码中将原来的100 + 50 然后通过balance?= 150,就会导致数据错误。 解决这个脏读的问题,就得将隔离级别设置为读已提交。
2、读已提交(read commited)设置隔离级别:set transaction_isolation = 'read-committed'; 1)此时客户端A与客户端B都开启事务,且数据都一致。 |
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/21 17:37:21- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |