首页 > 数据库 >MySQL如何保证一直读到最新数据?

MySQL如何保证一直读到最新数据?

时间:2023-07-25 19:15:34浏览次数:39  
标签:事务 读取 最新 保证 提交 MySQL 数据

问题:当出现某些特殊场景,一个事务A需要在未提交之前,一定要读取的是事务B提交的最新数据,该如何处理?

在MySQL中,事务隔离级别:读未提交、读提交、可重复读、串行化。

一、读未提交

读未提交会读到其它线程未提交的脏数据,虽然可以一直读到数据,但大部分都是脏数据,所以无法保证是最新有效的数据。

二、读已提交

可以保证一直读取有效数据,但普通事务无法保证可重复读。

三、可重复读

可以对某些特殊业务进行加行锁,使用共享锁(lock in share mode)即可保证一直读取最新数据。

当事务A、事务B同时begin时且未commit时,事务B修改了数据,若这里事务A如果在未提交情况下想要读取到最新数据,可以使用lock in share mode进行加锁读取,但是需要事务B进行提交。

注意:就算在“可重复读”模式下,加锁也会导致当前线程读取最新数据,mysql在加任何锁(如共享锁lock in share mode,排它锁for update,delete)之前都会获取最新数据,MySQL乐观锁通过Update版本号就是用的排它锁原理(防止多个线程同时加版本号出现错乱)

四、串行化

可以实现一直读最新数据,但效率低下。

标签:事务,读取,最新,保证,提交,MySQL,数据
From: https://www.cnblogs.com/yifanSJ/p/17580708.html

相关文章

  • mysql cpu使用率高的常见原因 mysql cpu占用率过高
    文章来自:https://blog.51cto.com/u_12192/6319295简单的分为下面几个步骤来解决这个问题:1、mysql运行正常,也有可能是同步设置问题导致2、如果mysql运行正常,那就是php的一些sql语句导致问题发现,用root用户进入mysql管理mysql-uroot-p输入密码mysql:showprocesslist;语句,查......
  • MySQL 事务机制
    事务机制:事务语法:--开始事务begin;--或starttransaction;--提交commit;--回滚rollback;--保存点savepoint;事务特性:默认事务:MySQL的事务默认自动提交:在自动提交的状态下每一条SQL就是一个事务会被直接执行手动开启事务后:则所有的SQL语句都在一个事......
  • MySQL 锁机制
    数据库锁:概念:锁是计算机协调多个进程或线程并发访问某一资源的机制(避免资源争抢)分类:按粒度表级锁:锁定整个表开销小加锁快不会出现死锁锁定粒度大发生锁冲突的概率最高并发度最低数据库引擎总是一次性同时获取所有需要的锁以及总是按相同的顺序获取表锁从而避免死......
  • MySQL 日志机制
    日志机制:错误日志:当数据库无法正常启动时第一个定位错误日志数据库速度慢时也可以定位错误日志得到建议(如增大缓存池增大redologbuffer等)查询日志:没啥用就是记录查询而已应该是为了对应binlog记录修改的日志慢查询日志:捕获查询慢的情况配置:可以设置每分钟最多有......
  • MySQL 数据库连接
    数据连接:连接:MySQL驱动:mysql-connector-Java-XXX.jar数据库连接的建立及关闭是及耗费系统资源的操作,在多层结构的应用环境中,这种资源的耗费对系统性能影响尤为明显。通过DriverManager获得数据库连接的方式,一个数据库连接对象对应一个物理数据库连接,每次操作都打开一个物......
  • MySQL 容灾备份
    容灾备份:数据备份:直接对数据库进行备份:#数据库备份语句#不指定表名的话默认就是整个数据库备份#备份文件可以指定绝对路径mysqldump-u[用户名]-p[库名][表名]...>[备份文件.sql]#多个数据库备份语句mysqldump-u[用户名]-p--databases[库名][库名]......
  • MySQL 索引
    索引分析:索引概述:定义:MySQL官方对索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构。结论:索引是数据结构结构:MySQL支持多种存储引擎而各种存储引擎对索引的支持也各不相同因此MySQL数据库支持多种索引类型如BTree索引、哈希索引、全文索引等等目前大部分数据库......
  • kettle连接数据库报错:Error connecting to database: (using class org.gjt.mm.mysql.
    kettle连接MySQL报错但已经把相应的包放到kettle的lib目录下时,仍然报连接不上的错误,那可能是MySQL时区的问题。解决如下:登入MySQL修改为东八区的命令:方法一:mysql>setglobalmax_allowed_packet=1024*1024;mysql>setglobaltime_zone='+8:00';方法二:修改my.ini文件,在[mysql......
  • Mysql开启慢查询日志
    查看mysql的慢查询日志是否开启showvariableslike'%query%';  可以看到slow_query_log的值是OFF,mysql默认是不启用慢查询日志的。这里还有个long_query_time,默认是10秒,也就是超过了10秒即为慢查询。log_queries_not_using_indexes,如果设置为ON,则会将所有没有使用索引的查......
  • mysql 中 myisam 与 innodb 的区别?
     1.事务支持>MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。>InnoDB:提供事务支持事务,外部键等高级数据库功能。具有事务(commit)、回滚(rollback)和崩溃修复能力(crashrecoverycapabilities)的事务安全(transaction-safe(......