`
星夜的遐想
  • 浏览: 186810 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MySQL踩得的坑

阅读更多

 

一、可重复读

 

Oracle的默认隔离级别为  READ COMMITTED ,而MySQL的默认隔离级别为 REPEATABLE READ 感觉MySQL的隔离级别还要高些,从理论上来讲更安全,但是。。

 

经过测试发现,虽然保证了可重复读的表象(一个事务中两次的读取的结果都是一致的),之前以为可重复读时,可以阻止其他事务进行修改,但是经过验证

 

 

1、查看数据库的隔离级别

SELECT @@tx_isolation;

-----------------

 

REPEATABLE-READ  

 

 

 

2、模拟两个客户端进行操作,在工具中,需要打开两个连接,而不是查询窗口。

 

  客户端A  

 

 

SET autocommit=0;

START TRANSACTION;

-- 第一次查询
SELECT * FROM t1;

-- 第二次查询(在客户端B执行完成后,再单独执行该语句)
SELECT * FROM t1;

 

 

    客户端B执行

 

 

SET autocommit=0;

START TRANSACTION;

UPDATE  t1 SET a =99 WHERE b=3000;

COMMIT;

 

 

    验证结果发现,即使在A事务执行过程中数据被B事务修改了,但是A的数据还是没有变化,虽然解决了两次读取数据不一致的问题,但是隐患更大,都不知道有没有被修改,因此直接取数来进行处理其实还是有问题的

 

问题虽然可以通过 读锁(共享锁)实现 LOCK IN SHARE MODE

 

如:SELECT * FROM t1 WHERE a=50 LOCK IN SHARE MODE 

 

这样就可以阻止其他事务,进行新增,修改,删除,如果a建了索引,锁的条件为a的记录;如果没有建索引锁的是整张表,其他记录也不能修改了;必须等到此事务提交才行,所以觉得还不如事务隔离级别设置为READ COMMITTED,虽然会出现不可重复读现象,但是至少每一时刻取的数据是真实的

 

 

 

 

二、MySQL的innoDB存储引擎支持的是行锁

 

经过验证发现,只有只有修改条件走索引才锁记录,否则会锁表。

验证语句可以参考附件

 

 

 

 

分享到:
评论

相关推荐

    docker安装mysql踩过的坑.doc

    学习docker安装mysql我遇到很多坑,大约花了三天才解决掉这个问题,真的是太坎坷了,差点就放弃让我学习Java的心态了。首先往VM安装带有docker东西的虚拟机,查看ip地址是192.168.200.128.然后按照网上步骤docker ...

    Windows mysql8.0.36.0详细安装教程,附带MySQL安装包

    配合提供的`MySQL安装教程.docx`文档,你可以更详细地了解每个步骤,避免遇到博主已经踩过的坑,确保安装过程顺利。 安装完成后,你可以使用MySQL Workbench连接到新安装的MySQL Server,进行数据库创建、表设计、...

    mysql主从复制搭建(避免采坑)

    mysql主从复制 踩完坑给大家 3分 完整,让大家少踩坑.

    mysql-8.0.20安装过程中踩过的坑

    官网下载最新版本MySQL,这里下载的是解压版的。 解压,解压完成之后,配置系统环境变量,把安装路径添加到Path中去(后面记得加;号) 创建my.ini文件 以管理员的身份打开cmd命令,切换目录到安装路径下的bin目录,...

    mysql-install.sh

    mysql部署过程中往往会遇到很多坑,笔者也是在踩了各种坑之后才总结出来这样一个脚本,可能还不太完善,或者对于不同的环境会出现各种问题,望理解

    spring boot + mybatis+ mysql环境搭建

    最近在尝试从0开始搭建框架,结果在mybatis这块就踩了很多坑。于是就决定写篇文章记录一下。 https://blog.csdn.net/lxyoucan/article/details/126233203

    微信小程序开发经验不踩过的坑

    - **云服务**:腾讯云提供了丰富的云服务支持,如DNS解析、HTTPS支持、对象存储、CDN加速、云Redis、云数据库MySQL等,可以大大提高开发效率和系统稳定性。 **3. 安全性** - **数据安全**:采用HTTPS协议传输敏感...

    详解MySQL 表中非主键列溢出情况监控

    之前踩到过MySQL主键溢出的情况,通过prometheus监控起来了,具体见这篇MySQL主键溢出复盘 这次遇到的坑,更加的隐蔽。 是一个log表里面的一个int signed类型的列写满了。快速的解决方法当然还是只能切新表来救急了...

    从零搭建分布式Hbase,并实现phoenix连接Hbse数据可视化 实现mysql数据导入Hbase

    我是自己摸索了半个月才全部搭建完成。几乎将所有能踩的坑都踩了一遍才搭建起来的。

    2-2、新一代高可用xenon在传统企业的落地与使用-徐晨亮@浙报传媒

    xenon/MySQLPlus在使用中踩到的坑主要包括了历史包袱问题、GTID使用限制、以及业务对VIP方式的连接等问题。徐晨亮通过实际案例分析了这些问题,并总结了解决方案。例如,历史包袱问题涉及到未开启GTID的情况,这是...

    zabbix-linux安装指南

    同时,文档也提供了作者踩过的坑,旨在帮助读者避免相同的错误。 标签解释 本文档的标签包括 Zabbix 和 PHP,表明本文档的主要内容是 Zabbix 的安装指南,并且使用 PHP 作为 Web 服务器端语言。 详细知识点 ### 1...

    基于Java的报刊订阅管理系统(JavaFX+数据库)(课程报告+代码实现)

    注意:全网站最全最新最优秀(信我开心,不信倒霉,坑我已踩完!) 通过对企业的报刊订阅业务进行分析、调查,报刊订阅管理系统主要实现以下功能: ①录入功能:录入订阅人员信息、报刊基本信息; ②订阅功能:订阅...

    阿里巴巴Java开发规约(详细整理版)

    以 Java 开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、MySQL 数据库、工程结构、设计规约七个维度。愿景是码出高效,码出质量。代码质 量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升系统...

    AliSQL性能优化与功能突破的演进之路

    线程池的使用和踩过的坑 在使用线程池的过程中,AliSQL团队总结了一些经验教训: - **慢SQL问题**: 慢SQL会严重影响线程池的性能和稳定性。 - **慢SQL来源**: 包括正常业务SQL、定时任务和系统后台操作等多种来源...

    分还是合?58到家订单中心架构演进-沈剑.pdf

    随着属性的增加,需要创建的索引数量呈指数级增长,这不仅降低了写入性能,而且使得维护成本变得异常高昂。 #### 方案二:垂直拆分 另一种方案是按照业务线垂直拆分,将不同业务的订单数据和服务拆分为独立的...

Global site tag (gtag.js) - Google Analytics