首页 > 数据库 >MySql事务以及隔离级别

MySql事务以及隔离级别

时间:2023-10-10 16:24:23浏览次数:42  
标签:事务 隔离 幻读 MySql -- 脏读 提交 sql 级别

MySql事务

  • 什么是事务?

    即为一段代码块在执行过程中同时结束并不报错,要么同时成功,要么同时失败

  • 为什么需要事务?

    为了考虑数据的安全性,比如转账时,付款和收款要同时成功

  • 事务怎么使用?

    -- 声明事务
    start transaction;
    sql 1,
    sql 2,
    .....
    commit; -- 提交事务
    
    -- 如果上述代码中有错误则回滚
    rollback;
    
    -- 回滚点,如上述代码 sql1,sql2 如果执行失败回滚需要从 sql1 开始  如果想从别的地方开始可以给 sql语句之间添加回滚点
    -- 如下
    start transaction;
    sql 1,
    sql 2,
    savepoint R1;
    sql 3,
    .....
    commit;
    rollback R1;  -- 回滚后 事务将从 sql 3开始执行
    

MySQL隔离级别

  • 读未提交 产生 : 脏读 ,不可重复读,幻读
  • 读已提交 解决了 脏读 存在:不可重复读 ,幻读
  • 可重复读 解决了 脏读,不可重复读 存在: 幻读
  • 串行化 解决所有
  1. 读未提交 产生问题,脏读 不可重复读 幻读

    A,B同时开启事务 A可以读到 B未提交的数据

    img

​ 如上图,A,B均操作临时库 所产生的数据均从临时库读取,所以有脏读现象

  1. 读已提交 解决了脏读问题 , 读取未提交数据

    A,B同时开启事务 开启事务,相当于创建了一块临时空间,用来存储数据库中的数据

    如果没有提交事务,则该临时空间内修改的数据,仅限于内存中,并不会持久化到数据库中

    img

  2. 可重复读 解决了 不可重复读问题 即为 同一数据,如若A一直提交修改,则B每次读的值不一样

    img

  3. 串行化 解决幻读问题

    什么是幻读,即为上述图,A事务 插入了一条数据student id为1 , 当B也想插入这条数据时,失败 ,但是查询结果为空。即出现了幻觉,这条数据在临时库查不到,但确实持久化到了数据库中

    串行化,就是排队,事务A结束,才能开启事务B

标签:事务,隔离,幻读,MySql,--,脏读,提交,sql,级别
From: https://www.cnblogs.com/RepublicLine/p/17754992.html

相关文章

  • MySQL基础命令
    一)基础命令1)对数据库的操作1.使用use库名;2.创建createdatabase库名;3.删除dropdatabase库名;4.显示数据库,表showdatabases;showtables;2)对数据表的操作1.创建表createtable表名(字段字段类型,idint,namevarchar(32));2.删除表droptable表名;3.修改表名altertable......
  • MySQL业务用户无法修改的会话级别参数
    对于MySQL的系统参数,有些参数只能在全局级别(global)修改,有些参数能在全局和会话(session)级别修改。对于能在会话级别修改的参数,应用用户也可以在当前会话中修改需要的参数来实现不同的业务需求。比如sql_mode参数,如果不同的应用可以根据不同的需求在各自的session中进行修改。此外,......
  • MySQL 低版本 解决row_number()over()无法使用的方法
    MySQL8以上版本支持了很多的窗口函数,但是低版本的可能也需要用到row_number()over()selecta.u_name,a.class,a.score,if((@class=null)or(@class=a.class),@rownum:=@rownum+1,@rownum:=1)rn,#没有并列情况if((@class=......
  • MySQL存储过程、递归调用
    MySQL存储过程、递归调用实现字典数据的预处理,维护类别表、数据表、tree表,数据库在jwzh_manager库1、先将excel导入到system_dict表,按表字段注释对应匹配。2、编写存储过程处理数据CREATEDEFINER=`root`@`%`PROCEDURE`handle_system_dict`()BEGIN #Routinebodygoesher......
  • 9月《中国数据库行业分析报告》已发布,47页干货带你详览 MySQL 崛起之路!
    为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》,持续传播数据技术知识、努力促进技术创新与行业生态发展,目前已更至第十七期,并发布了共计1......
  • MySQL进阶篇:第三章_SQL性能分析
    MySQL进阶篇:第三章_SQL性能分析SQL执行频率MySQL客户端连接成功后,通过show[session|global]status命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次:--session是查看当前会话;--global是查询全局数据;SHOW......
  • 定时备份mysql脚本
    定时备份mysql指定数据库脚本,保留60天#!/bin/bash#pathcd/opt/pmo/mysql_datatarget_directory="/opt/pmo/mysql_data"#gettimenowcurrent_time=$(date+%s)#cal22monthsagobefore_time=$(date-d"60daysago"+%s)file_name=metersphere_`date+......
  • MySQL进阶篇:第四章_四.一_ 索引使用_最左前缀法则
    索引使用_最左前缀法则最左前缀法则如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。以tb_user表为例,我们先来查看一下之前tb_user表所创建的索引。在......
  • 《MySQL与MariaDB学习指南》高清高质量 原版电子书PDF+源码
    下载:https://pan.quark.cn/s/2392eb287424......
  • mysql 创建表分区 list分区
    CREATETABLE`goods`(`id`varchar(36)NOTNULL,`goods_name`varchar(256)NOTNULLCOMMENT'产品名称',`release_version`varchar(8)NOTNULL,PRIMARYKEY(`release_version`,`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4ROW_FORMAT=DYNAMIC;al......