首页 > 数据库 >MySQL事务隔离级别

MySQL事务隔离级别

时间:2023-03-20 11:47:56浏览次数:42  
标签:事务 隔离 数据 提交 MySQL 级别 ID

        大家都知道,MySQL的事务特性ACID,那么本文就针对I(隔离性)做出详细说明。

        MySQL中事务的隔离级别分为四大等级,分别是读未提交READ UNCOMMIT、读提交READ COMMIT、可重复读REPEATABLE READ(MySQL默认的隔离级别)、串行化SERIALIZABLE。在MySQL中可通过select @@transaction_isolation;查看当前隔离级别、set global/session transaction isolation level read commit;指定新的隔离级别,此处的global代表全局有效,session代表当前会话窗口有效。在设置完隔离级别后,对于之前打开的会话是无效的,需要重新打开新窗口才会生效。

        事务的一般流程为:begin/start transaction开启事务-->SQL语句修改-->commit提交。同时开启两个事务A和B:

  1. 读未提交:在A中修改后先不提交,此时B中的select查到的数据已经是修改过后的数据了。会产生脏读问题。
  2. 读提交:在A中修改后先不提交,此时B中的select查到的数据仍然是修改之前的数据;然后在A中commit提交,B中select查到的数据才是修改过后的数据。解决了脏读问题,但出现了不可重复读的问题。
  3. 可重复读:事务不会读到其他事务对已有数据的修改,即使事务已提交。即,在A中修改后并且提交后,B中查到的数据仍然是未修改的数据(事务A和B必须同时打开)。解决了脏读与不可重复读问题,但出现了幻读问题,幻读一般是针对insert(什么是幻读?比如A查询ID=100,发现不存在此行,Empty Set。此时B通过insert新增了一条ID为100的数据,而由于A认为该表中没有ID为100的数据,因此A也插入一条ID为100的数据,此时报错ID冲突,A感到很奇怪又select了一下,发现ID为100的数据又出现了???这种现象就是幻读)。
  4. 串行化:执行流程相当于把事务的执行过程变为顺序执行,相当于单线程,后一个事务的执行必须等待前一个事务执行完毕。隔离效果最好,解决了上述所有问题,但效果最差。

        所以,上述隔离级别的效果是逐渐增强,但性能是越来越差。

 

标签:事务,隔离,数据,提交,MySQL,级别,ID
From: https://www.cnblogs.com/TzySec/p/17235763.html

相关文章

  • ShardingSphere5.0.0-Sharding-proxy MySql 读写分离
    一、关于ShardingSphere 官网:ApacheShardingSphere官方文档:概览::ShardingSphere官方下载:Indexof/dist/shardingsphere本文使用版本:apache-shardingsphere-5.0.0......
  • mysql datetime is null
    mysql中时间字段datetime怎么判断为空和不为空一般为空都用null表示,所以一句sql语句就可以。select*from表名where日期字段isnull;这里要注意null的用法,不可以用=nu......
  • mysqldump + binlog实现增量备份
    1、核心思路搞明白一件事:到底什么是增量备份?答:①要有全量备份②继续增删改数据③再次需要备份时,不需要进行全量备份,只需要备份binlog日志文件即可(因为binlog日志记录了......
  • mysql5.6以下排序
    SELECTtt.id,(@rowNum:=@rowNum+1)ASrankingFROM(select5asidunionallselect4asidunionallselect3asidunionallselect2asidunionall......
  • MySQL5种索引类型
    MySQL的类型主要有五种:主键索引、唯一索引、普通索引、空间索引、全文索引有表:CREATETABLE`t1`(`id`bigintunsignedNOTNULLAUTO_INCREMENT,`u1`intunsignedNOT......
  • apple M1 python开发,django,安装mysqlclient并使用
    前言此笔记记录了MBPM1芯片的苹果本,解决mysqlclient虽然安装成功,但是会遇到_namenotdefound的解决办法解决过程内容参考:https://github.com/PyMySQL/mysqlclient/iss......
  • mysql 索引(InnoDB)
    mysql创建索引地址:https://dev.mysql.com/doc/refman/8.0/en/create-index.html概述:什么是索引:在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进......
  • 你能说出MySQL主从复制的几种复制方式吗?
    异步复制多线程复制增强半同步复制异步复制MySQL的复制默认是异步的,主从复制至少需要两个MySQL服务,这些MySQL服务可以分布在不同的服务器上,也可以在同一台服务......
  • mysql-批量替换字符串(replace)
    问题概述批量替换mysql一个表中某个字段的值里面的部分字符串,使用mysqlreplace函数问题解决01、备份表CREATETABLExt_mbfwpz_bak_sjbASSELECT*FROMxt_mbfwpz;......
  • mysql-datadir权限被修改导致权限异常
    概述同事反馈引用连接mysql提示权限不足(Errcode:13Permissiondenied)查看mysql进程&&修改权限//psaux|grepmysql[root@~]#psuax|grepmysqlroot1......