首页 > 数据库 >3.mysql事务

3.mysql事务

时间:2023-02-17 16:48:04浏览次数:54  
标签:存储 隔离 事务 提交 mysql 执行

mysql事务
  • 事务:
    • 什么是事务
      • 事务是访问和更新数据库的程序执行单元,一个事务中可能包含一个或多个sql语句,且这些语句要么都执行,要么都不执行
    • mysql逻辑架构
    • img
      如上图,mysql服务器逻辑架构分为三层
      1. 处理客户端连接,授权认证
      2. 服务器层,负责查询语句的解析、优化、缓存以及内置函数的实现存储过程
      3. 存储引擎,负责mysql中数据的存储和提取,服务器层不管理事务,事务主要是存储引擎来实现的,mysql中支持事务的存储引擎有Innodb,不支持事务有myisam,memory
    • 提交和回滚
      1. mysql中默认是采取自动提交的模式
    • 特性ACID
      1. Atomicity(原子性)
        • 原子性:指事务整个过程如原子操作一样,其中的操作要么全部都执行,要么都不执行,如果事务中一个操作失败则全部回滚,退回事务前状态
      2. Consistency(一致性)
        • 一致性:事务必须使数据库从一个一致性状态变换到另一个一致性状态
      3. Isolation(隔离性)
        • 隔离性:一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰的
      4. Durability(持久性)
        • 持久性:一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的,当事务提交后数据的会持久化到硬盘,修改是永久性的
      5. 注意点
        • 按照严格的标准,只有同时满足ACID特性才是事务,Innodb默认事务隔离级别是可重复读不满足隔离性
    • Mysql的隔离级别
      • Read Uncommitted(读未提交)
        • 所有的事务都可以看到其他未提交事务的执行结果
        • 问题:脏读(读取未提交的数据)
        • img
      • Read Committed(读取提交内容)
        • 这是大多数数据库系统的默认隔离级别
        • 一个事务只能看到已经提交事务所做的改变
        • 问题:不可重复读
          • 不可重复读意味着同一事务中执行完全相同的select语句可能所看到不一样的结果
          • img
      • Repeatable Read(可重复读)
        • 这是Mysql默认事务隔离级别
        • 确保同一事务的多个实例在并发读取数据,会看到同样的数据行
        • 问题:幻读(当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行会发现有新的“幻影”行)
        • img
        • InnoDB 和 Falcon 存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。
      • Serializable(串行化)
        • 最高的隔离级别
        • 通过强制事务排序,使之不可能相互冲突,从而解决幻读问题(它是在每个读的数据行上加上共享锁。)
        • 可能会导致大量的超时和锁竞争
      • img
    • 链接:

标签:存储,隔离,事务,提交,mysql,执行
From: https://www.cnblogs.com/blackamon/p/17130662.html

相关文章

  • 第一周复习笔记(MySQL、Redis、JVM、JUC)
    MySQL1.引擎1.1Innodb和MyIsAM的区别1.2Innodb的逻辑存储结构2.索引2.1索引的分类2.2索引优化2.3索引失效的场景3.事务3.1事务的隔离级别3.2ACID原则......
  • 为什么mysql 要用B+树而不用二叉树
          1.B+树的层级更少B+树的高度一般为2-4层,所以查找记录时最多只需要2-4次IO,相对二叉平衡树已经大大降低了。范围查找时,能通过叶子节点的指针获......
  • mysql8 docker 安装
    1.镜像下载dockerpullmysql:8.0.212.创建目录创建data,conf等目录,用于保存mysql的数据3.启动镜像dockerrun-it-d--namemysql--net=host\-v/var/appl......
  • mysql:分组查询每组最新的一条数据
    我们经常遇到类似这样的需求,查询最近N秒、N分钟、N小时的数据及N天的数据,相关的方法和函数很多,本人最近用的MySQL数据库,也就用MySQL为例,大概介绍几种比较通用的方法。一、......
  • odoo手动提交事务问题探索
    背景:在做项目时,发现数据库中几百条数据的修改时间都是相同的。寻找其中原因,在代码层面为了避免大数据量放在一次修改数据,特意做了分页查询,每一页执行一次更新方法,所有数据......
  • Java: RocketMQ事务消息的优雅使用
    背景在项目中,技术方案需要使用事务消息来保证最终一致性达到实现业务的目的。但在一个服务中有多个业务需要使用事务消息发送不同的消息类型到不同的Topic时,RocketMQ的本......
  • 故障案例:MySQL唯一索引有重复值,官方却说This is not a bug
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:飞鱼过天文章来源:GreatSQL社区原创......
  • 【MySQL-视图/存储过程/存储函数/触发器】
    零、本文纲要一、视图二、存储过程三、存储函数四、触发器tips:Ctrl+F快速定位到所需内容阅读吧。一、视图0、表&数据准备--新建表格createtabletb_test(idint......
  • 【MySQL-SQL优化:主键,order by,group by,limit,count,update】
    零、本文纲要一、插入数据二、主键优化三、orderby优化四、groupby优化五、limit优化六、count优化七、update优化update优化tips:Ctrl+F快速定位到所需内容阅读吧。一、......
  • MySQL数据库的几种登录方式
    1234567891011前提:连接进入mysql数据库本机安装的myslq基础信息:host="localhost",数据库主机地址:127.0.0.1port=3306,端口号user="root",myslql数据库......