当前位置:网站首页>MySql事务
MySql事务
2022-08-11 08:30:00 【指挥部在下面】
事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。例如:在转账的由于网络等问题,你的账户是转出去了,但是对方没有收到。那么引进事务,就可以保证要么转成功,要么不转。
事务的使用
我们先创建一个账户表
1.开启事务:start transaction;
2.结束事务:commit;
3.回滚:rollback; -- 在事务的执行过程当中,mysql会记录每一步都执行了什么,一旦出现问题就可以根据记录回滚,进行复原。
事务的4大特性
1.原子性:在计算机中原子性意味着不可再分,是事务的根本所在,能够把多个sql打包成一个整体,要么全部执行完,要么一个都不执行(执行出错,根据记录,自动回滚)。
2.一致性:事务执行前后,数据处在“一致”的状态(数据能对的上,合情合理)
3.持久性:事务进行的改动,都是写在硬盘上,不会随着程序重启/主机重启而丢失
4.隔离性(最复杂):多个事务,并发执行的时候,事务之间能够保持“隔离”,互不干扰。
详解隔离性
什么是并发执行?mysql本体是一个服务器,执行sql语句,本质是客户端把sql发给服务器去执行,事务也是一样的。同一时刻,多个客户端,都给服务器发了事务,如果这些并发执行的事务,操作的是不同的库,不同的表不会出现问题,但是如果是相同的数据库,相同的表,就会出现问题。这也是隔离存在的意义
1.脏读:一个事务A在修改数据,提交之前,另一个事务B读取了数据,后续A又修改了数据,此时事务B读到的就是“无效数据”
解决方案:对写操作进行加锁。即在A提交之前,不能读,提交之后才能读。
2.不可重复读:之前已经对写加锁,B在读的过程中,A又有了新的想法,对代码进行修改,再提交。B在读取的时候,代码又变了。即在一个事务A中,多次读取同一个数据,发现数据不一样(读的时候被人改了)。
解决方案:对读进行加锁,即B在读取数据的时候,A不去修改。
3.幻读:已经对读和写进行加锁了,但是在B读文件A 的时候,A去增加/修改其他文件(并没有影响到B读取数据)B读取的数据没有问题,但是发现结果集变了(第一次只有一个.java文件,下次读突然变成2个.java文件)
解决方案:“串行化”,B读取数据的时候A什么都不能做。
上述过程中,并发程度不断降低,效率变低;而隔离度不断提高,数据的准确性变高。
隔离级别
1.read uncommitted,允许读未提交的数据,并发程度最高,隔离程度最低,可能存在脏读/不可重复读/幻读
2.read committed,对写进行加锁,只能读提交之后的数据,并发程度降低,隔离程度提高,解决了脏读,可能存在不可重复读/幻读
3.repeatable read(mysql默认),对读写都加锁,并发程度再降低,隔离程度再提高,解决了脏读/不可重复读,可能存在幻读
4.serializable,严格执行串行化,并发程度最低,隔离程度最高,解决了脏读/不可重复读/幻读问题,效率最低
设置级别的地方:在mysql的配置文件my.ini进行设置
在以后的开发中需要根据不同需求场景,设置不同的挡位。平衡效率和准确性。
边栏推荐
- 借问变量何处存,牧童笑称用指针,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang类型指针(Pointer)的使用EP05
- Initial use of IDEA
- 抽象类和接口
- Alibaba Sentinel - Slot chain解析
- tensorflow 基础操作1(tensor 基本属性 , 维度变换,数学运算)
- 2022-08-10:为了给刷题的同学一些奖励,力扣团队引入了一个弹簧游戏机, 游戏机由 N 个特殊弹簧排成一排,编号为 0 到 N-1, 初始有一个小球在编号 0 的弹簧处。若小球在编号为 i 的弹
- pycharm中绘图,显示不了figure窗口的问题
- for循环和单击相应函数的执行顺序问题
- 用 Antlr 重构脚本解释器
- matplotlib
猜你喜欢

【TA-霜狼_may-《百人计划》】图形3.7.2 command buffer简

Mysql JSON对象和JSON数组查询

Keep track of your monthly income and expenses through bookkeeping

Nuget can't find the package problem

go-grpc TSL authentication solution transport: authentication handshake failed: x509 certificate relies on ... ...

tensorflow 基础操作1(tensor 基本属性 , 维度变换,数学运算)

OAuth Client默认配置加载

少年成就黑客,需要这些技能
初级软件测试工程师笔试试题,你知道答案吗?

golang string manipulation
随机推荐
小程序组件不能修改ui组件样式
笔试题大疆08.07
Mysql JSON对象和JSON数组查询
2021-08-11 For loop combined with multi-threaded asynchronous query and collect results
shell之sed
Unity3D - modification of the Inspector panel of the custom class
Has legal counsel become a tasteless product of law firms?
麒麟V10系统打包Qt免安装包程序
框架外的PHP读取.env文件(php5.6、7.3可用版)
idea 方法注释:自定义修改method的return和params,void不显示
零基础SQL教程: 主键、外键和索引 04
go 操作MySQL之mysql包
Notable NFT development trends in 2022
kali渗透测试环境搭建
3.1-Classification-probabilistic generative model
机器学习(二)线性回归
查询跟踪快递单号物流,智能分析物流中转有延误的单号
XXL-JOB 分布式任务调度中心搭建
opengauss创建用户权限问题
Creo9.0 特征的成组