mysql中的事务

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: mysql中的事务

在日常生活中,我们会遇到一个场景,那就是在转账的时候,A有1000块钱,要给B转账500,那么最后的结果是A有500,B有500,但是也有可能出现A没有钱了,B有1000块,或者在转账过程中卡顿,这是不符合逻辑的,那么这个时候就要使用事务来解决问题


事务就是把一堆sql语句打包成一个整体,要么全都执行,要么就不执行,那么是真的没有执行吗,其实这是一个假象,其实执行了,只是没有显现出来,执行了,执行到一半发现卡顿了,那么就还原到没执行 的样子.这个过程叫做回滚" roll back"


在回滚的过程中,我们要怎样知道回滚到哪一个地步了呢,需要额外的部分记录具体的操作,数据库中有专门的的事务记录日志,因此使用事务执行sql是非常耗费空间的

下面来看一看的事务执行的相关代码


start transaction//开启事务
update  account set  money=money-200    where  name='李四';
update   account set  money=money+200  where  name='张三'
commit //提交事务 相等于事务已经执行完了

从start到commit之间的这段就是事务具体执行的操作

下面,来讨论一次啊数据库事务的特性

面试爱考的点

1.原子性

2.一致性  执行完前后数据对得上

3.持久性  事务修改的内容在硬盘上,可以持久保存

4.隔离性  这个是最难理解的,这个特性是为了解决并发执行事务,引起的问题


举个例子,去餐馆吃饭


如果一次性来了很多人,大家点不一样的餐,那么大厨如果只有一口锅,那么可以一个一个做,如果很多锅,可以一起炒


此时餐馆作为服务器,要处理顾客也就是客户端的请求,一次性来很多条请求,就需要一起处理,


数据库本质是服务器,那么处理大量请求,就是并发执行事务的过程


并发执行任务产生的问题以及数据库利用隔离性的解决办法


1.脏读问题

事务A在修改数据时,事务B读取了数据,而事务A在改完数据以后提交了,那么事务B原来读取的数据就是无效的,事务B读取的过程叫做脏读,读取到的数据叫做脏数据


解决办法

给写加锁,也就是在事务A写的时候或者改的时候,事务B不可以读,这样写操作和读操作不能同时并发执行了不能一起干


这样做降低了并发程度(降低了效率),提高了隔离性(提高了数据的准确性)


2.不可重复读

具体是这样的,事务A已经提交了数据,事务B开始读,而在事务B读的过程中,事务A又修改了数据提交,事务B在读的时候发现数据改变了,也就是在读的一次过程中,出现了不同的结果,就叫做"不可重复读"


解决办法


给读加锁,就是只能读,不能修改,在事务B读的过程中事务A不可以进行修改

进一步降低了并发程度(降低了效率),提高了事务的隔离性(进一步提高了数据的准确性)

3.幻读问题


事务A在写的时候事务B不可以读,事务B在读的时候事务A不可以写,这样在读加锁和写加锁的前提下,这样不会出现上述的两种情况,但是在事务B读1文件数据时,事务A可能又创建了一个文件,并且提交了

这个时候读到的结果集不一样了,就是读着读着多出现了一个文件,这就叫做幻读


解决办法


数据库使用"串行化"方式解决幻读的问题,放弃并发处理事务,一个一个串行处理事务


脏读                 给写加锁


不可重复读      给读加锁


幻读                 串行化处理


是并发处理事务产生的问题


面对上述三种问题


mysql提供了四种隔离级别


1.  read   uncommitted   没有任何锁限制,并发程度最高(效率最低),隔离性最低(数据准确性最低)

2.read      committed      给写加锁,并发程度降低(效率提高),隔离性提高(数据准确性提高)

3.repeatable   read          给读和写都加锁,并发程度进一步降低(效率进一步提高),隔离性进一步提高(数据准确性进一步提高)

4.serializable           串行化处理事务        并发程度最低,隔离性最高

加锁本质上是cpu 指令,后期在详细讲解

今天就讲解到这里,下期再见,886!!!


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 SQL 关系型数据库
MySQL的事务隔离级别
【10月更文挑战第17天】MySQL的事务隔离级别
100 43
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1648 14
|
3月前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
555 18
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
2月前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
3月前
|
SQL 关系型数据库 MySQL
MySQL基础:事务
本文详细介绍了数据库事务的概念及操作,包括事务的定义、开启、提交与回滚。事务作为一组不可分割的操作集合,确保了数据的一致性和完整性。文章还探讨了事务的四大特性(原子性、一致性、隔离性、持久性),并分析了并发事务可能引发的问题及其解决方案,如脏读、不可重复读和幻读。最后,详细讲解了不同事务隔离级别的特点和应用场景。
149 4
MySQL基础:事务
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL】索引和事务
【MySQL】索引和事务
55 0
|
3月前
|
SQL Oracle 关系型数据库
详解 MySQL 的事务以及隔离级别
详解 MySQL 的事务以及隔离级别
43 0
|
4月前
|
SQL 关系型数据库 MySQL
Mysql原理与调优-事务与MVCC
【8月更文挑战第19天】
|
4月前
|
存储 SQL 关系型数据库
深入解析MySQL事务机制和锁机制
深入解析MySQL事务机制和锁机制
|
4月前
|
算法 关系型数据库 MySQL
一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这篇文章是关于MySQL的面试题总结,包括索引结构的优劣、索引设计原则、MySQL锁的类型、执行计划的解读以及事务的基本特性和隔离级别。
下一篇
无影云桌面