当前位置:网站首页>mySQL事务及其特性分析
mySQL事务及其特性分析
2022-08-11 10:01:00 【最后一只三脚兽】
事务
事务的核心是是其原子性,在计算机中我们把不可分割的事物成为具有原子性,而事务就是不可分割的。
我们常常会遇到下面的情况:
A 转账给 B 100元
与之对应的B 会收到 A 的100元
这两件事必须要么全部失败,要么全部完成,是不可分割的,如果转账成功后服务器突然有问题使得B并没有收到100元,这就会造成很大的问题。而事务为这种情况提供了回滚(roll back)的操作,使数据回到转账之前,即保证了数据的“一荣俱荣,一损俱损”。
除了其核心的原子性之外,事务还具有其它三个特性:
- 持久性:即事务进行的改动全部都会存在硬盘中,不会因为服务器关机或重启而改变
- 一致性:即事务进行改变时是从一个一致的状态转为另一个一致的状态,“一致”指的是数据都能对的上
- 隔离性:即并行开发时,事务之间能够保持隔离,互不干扰。
持久性就不再具体叙述。
一致性
依旧是前面转钱的例子,如果A转账成功而B没有收到钱,这就是从一个一致的状态转为一个不一致的状态。我们可以发现原子性和一致性是紧密相连的。
隔离性
隔离性虽然定义简单,但根据其隔离的等级又可深入研究。
脏读问题
A和B两人同时处理一个账户,如果A看到账户有100,之后B又给账户中冲了100,这时就发生了脏读问题,即A读到了错误的数据。为避免这种情况数据库软件提供了锁机制,只要让B修改时禁止A读数据就避免了脏读问题,即对写操作上了锁,这样做降低了并发性,但稍微提高了结果的准确性
不可重复读问题
同样是A和B,如果A正在读数据,此时B突然修改了数据,这就会导致A读完后想再读一遍时发现数据出现了变化,造成了不可重复 度问题。对于这个问题,我们可以把读操作加锁,即在读数据时禁止写入数据。这样做又降低了并发性,进一步提高了数据的准确性。
幻读问题
还是A和B,A在读数据时,B又想添数据,不过B这时想修改或添加的是另一个文件,并不会影响A正在读的数据。这样虽然A多次读数据并没有影响,但会出现读着读着发现多了一个文件的情况,好像出现了幻觉,但在大多数情况下这种情况并没有影响。想要避免幻读问题,就要把并行事务串行化,即A在做的时候B就不能做,反过来也是这样。这种方法使得数据的准确性最大化,而并行化降至最低。
数据库的隔离机制
对于不同的问题,mySQL提供了四种隔离等级:
- read uncommitted 允许读未提交的数据,即完全放行,A想干啥就干啥,B想干啥就干啥,并行程度最高,数据准确性最低
- read committed 只能读提交之后的数据,即给写操作加锁,避免了脏读问题
- repeatable read 给读和写操作加锁,避免了脏读问题和不可重复读问题
- serializable 即串行化,数据的准确性最大化,而并行化降至最低,同时避免脏读、不可重复读和幻读问题。
对于不同场景,我们可根据需要选择不同的等级,例如B站点赞功能就不需要那么高的准确性,完全可以使用最低等级限制,而对于转账问题就要使用较高等级的隔离手段。mySQL默认是第三等级,如果需要修改需要在配置文件中修改。
边栏推荐
- 基于卷积的神经网络系统,卷积神经网络毕业论文
- Convolutional Neural Network System,Convolutional Neural Network Graduation Thesis
- 1.3版本自定义TrainOneStepCell报错
- SQL statement
- 2022-08-10:为了给刷题的同学一些奖励,力扣团队引入了一个弹簧游戏机, 游戏机由 N 个特殊弹簧排成一排,编号为 0 到 N-1, 初始有一个小球在编号
- 浮点型在内存中的存储
- 使用树莓派和OAK相机部署机器人视觉模型
- Segmentation Learning (loss and Evaluation)
- logstash/filebeat只接收最近一段时间的数据
- 数据中台方案分析和发展方向
猜你喜欢
使用树莓派和OAK相机部署机器人视觉模型
数字钱包红海角逐,小程序生态快速引入可助力占领智慧设备入口
canvas文字绘制(大小、粗体、倾斜、对齐、基线)
神经痛分类图片大全,神经病理性疼痛分类
零基础创作专业wordpress网站12-设置标签栏图标(favicon)
【Prometheus】Alertmanager告警全方位讲解
Open Office XML 格式中的 Style 设计原理
Network model (U - net, U - net++, U - net++ +)
pycharm 取消msyql表达式高亮
Primavera P6 Professional 21.12 Login exception case sharing
随机推荐
Software custom development - the advantages of enterprise custom development of app software
Primavera Unifier - AEM Form Designer Essentials
Typora and basic Markdown syntax
HDRP shader 获取阴影(Custom Pass)
wordpress插件开发03-简单的all in one seo 插件开发
Three handshakes and four waves
Dreamweaver网页作业——紫罗兰永恒花园动漫价绍网页 7页,含有table表格,js表单验证还有首页视频。以及列表页。浮
Oracle database use problems
A few days ago, Xiaohui went to Guizhou
HDRP shader 获取像素深度值和法线信息
MySQL约束
canvas图形操作(缩放、旋转、位移)
Have you encountered this kind of error? flink-sql writes to clickhouse
错误代码: 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current
Unity shader test execution time
前几天,小灰去贵州了
Primavera Unifier 高级公式使用分享
【UOJ 454】打雪仗(通信题)(分块)
Adobe LiveCycle Designer report designer
清除微信小程序button的默认样式