`
星夜的遐想
  • 浏览: 182734 次
  • 性别: 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 ...

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

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

    Mysql8.0.rar

    压缩包中包含mysql8.0免安装ZIP文件,mysql8.0安装教程word文档,和本人配置和使用过程中踩过坑后最终配置文件。 (PS:赚点积分好难啊。。。)

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

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

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

    Windows mysql8.0.36.0详细安装教程,附带MySQL安装包,让你不再为了资源而烦恼。跟着教程一步一步安装即可(博主是现安现写的安装教程,所有坑都踩了让你不再走弯路)

    数据库+Mysql+性能调用+用于在实践过程中进行Mysql的性能调优

    该部分主要是在Mysql实践应用过程中,针对Mysql的性能优化总结的21个实践经验,难度一般,主要是一般性的总结,便于在实践开发过程中,避免踩到对应的坑。 适用人群: 在实际开发过程中,遇到的mysql的性能优化...

    Linux系统下mysql安装

    linux下mysql环境安装,踩过很多坑,希望各位能jie'ji

    mysql-install.sh

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

    Linux坏境下Mysql5.7安装总结(centos7).docx

    包括:centos7下mysql5.7的安装过程及数据仓库迁移。踩过多坑后的总结,分享。绝对能用。 一、 原来mysql残余清除步骤: 二、 安装步骤: 三、 数据仓库迁移: 四、 相关操作命令

    opensips+FS集群+mysql.docx

    opensips+freeswitch+mysql(pgsql)集群方案 ,踩了很多的坑, 看了很多的文档在别人的基础上在整理了一个版本

    linux基于keepalived的mysql双机热备实现方案(详细过程完整版)

    linux下基于keepalived的mysql双机热备实现方案,本文档用于实现mysql数据库双机热备灾备方案,在系统部署过程中还需仔细认真,有时候一个小小的配置错误就可能导致部署失败,本人在此套技术验证过程中也踩了不少坑,...

    HTML+CSS+ajax+php+mysql实现登录

    HTML+CSS+ajax+php+mysql实现登录。有数据库建表语句。比较简单 适合新手。也是新手学习,踩了很多坑(有坑的地方代码备注比较清楚了)。提供给新手门共同学习。

    win10下mysql 8.0.16 winx64安装图文最新教程

    为了下载这个数据库耗费大量时间和流量,踩过的坑希望能让大家不必再浪费时间,win10安装64位 1.官网下载 搜索mysql第一个就是官网,截图之后图片扭曲请大家见谅 2.解压压缩包到想要安装的目录,我是解压到d盘 3....

    spring boot + mybatis+ mysql环境搭建

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

    windows下php7+mysql+apache完全手工配建立并测试全过程

    手动配置php7 mysql,apache,包括全部过程,包含下载链接,以及测试的php文件,数据库链接等等,避免了踩到坑!

    Linux rpm格式MySQL5.6包及安装文档

    Linux rpm格式 服务端和客户端 MySQL5.6包及安装文档。自己看很多有包无安装无文档,有文档无包。查了很多资料和踩了坑总结了一个详细文档。一个一分,希望对大家有帮助

    MySQL插入时间差八小时问题的解决方法

    解决MySQL插入时间差八小时问题 一般 jdbc url中 需要添加几个参数 , 大多数博客给的教程都是 ...对于解决时区问题,以前我也是这么用的 serverTimezone=UTC ,直到了今天踩到小坑了,才知道这不是万能的. 首先正常插

    CentOS7.5使用mysql_multi方式安装MySQL5.7.28多实例(详解)

    在导入数据库时会出现问题,所以重新研究使用mysql_multi的方法来管理多实例,经过测试环境验证之后,在各方面使用上特别在备份还原上,没有报MySQL5.7.28多实例的问题,踩了不少坑,这里我将我的部署过程分享下,...

    CentOS7安装配置Mysql

    参考网上安装的,记录踩过的坑,希望能帮到后面的同学

Global site tag (gtag.js) - Google Analytics