当前位置:网站首页>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进行设置
在以后的开发中需要根据不同需求场景,设置不同的挡位。平衡效率和准确性。
边栏推荐
猜你喜欢
Keep track of your monthly income and expenses through bookkeeping
Find the latest staff salary and the last staff salary changes
Do you know the basic process and use case design method of interface testing?
leetcode: 69. Square root of x
9、Neural Sparse Voxel Fields
flex布局回顾
2022 China Soft Drink Market Insights
阿里云OSS上传文件超时 探测工具排查方法
OAuth Client默认配置加载
几何EX3 功夫牛宣布停售,入门级纯电产品为何总成弃子
随机推荐
nodejs微服务中跨域,请求,接口,参数拦截等功能
Nuget找不到包的问题处理
选择收银系统主要看哪些方面?
快速幂,逆元的求解
eureka和consul的区别
万字长文带你了解多态的底层原理,这一篇就够了
Getting Started with Kotlin Algorithms Calculating Prime Factors
你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06
XXL-JOB 分布式任务调度中心搭建
优炫数据库支持多列分区吗?
Redis 只会用缓存?20种妙用让同事直呼牛X(荣耀典藏版)
为什么会没有内存了呢
美术2.4 UV原理基础
小程序组件不能修改ui组件样式
The easiest trick to support quick renaming of various files
FPGA 20个例程篇:11.USB2.0接收并回复CRC16位校验
Machine Learning Summary (2)
Getting Started with Kotlin Algorithm to Calculate the Number of Daffodils
tensorflow 基础操作1(tensor 基本属性 , 维度变换,数学运算)
基础SQL——DDL