收藏本站 收藏本站
积木网首页 - 软件测试 - 常用手册 - 站长工具 - 技术社区
首页 > 数据库 > MySQL > 正文

首页 - PHP - 数据库 - 操作系统 - 游戏开发 - JS - Android - MySql - Redis - MongoDB - Win8 - Shell编程 - DOS命令 - jQuery - CSS样式 - Python - Perl

Access - Oracle - DB2 - SQLServer - MsSql2008 - MsSql2005 - Sqlite - PostgreSQL - node.js - extjs - JavaScript vbs - Powershell - Ruby

mysql 详解隔离级别操作过程(cmd)

读未提交示例操作过程-Read uncommitted

1、打开两个MySql的命令提示行,均进入相同数据库,并检查当前表内容为相同数据如下:

查看图片

2、在A、B两端执行select @@tx_isolation;检查当前默认的隔离级别别,可以发现都是

Repeatable Read ?可重复读-(在当前事务内,重复读取第一次读取过的数据就叫可重复读。)

查看图片

3、修改A端的隔离级别为readuncommitted ?读未提交。意思是可以读取别人没有提交的数据。

set transactionisolation level read uncommitted;

在绿色的MySql5.5上请执行:

Set sessiontransaction isolation level read uncommitted;

然后再查看是否已经发生改变:

查看图片

4、在A、B两端都开启事务

starttransaction;

5、在B端修改一行数据如:

update stud setname='Jhon' where id=1;

其后在A端执行查询:select * from stud;

查看图片

6、此时B端再次执行回滚操作

Rollback;

再在A端进行查询,结果发现数据又回到了之前的数据。这就是脏读

查看图片

7、对于B端写入的新数据,如果没有提交A端也一样能查询到,这叫幻读

查看图片

读已提交操作过程:-read COMMITTED

1、 检查A、B两端是否一致:

查看图片

2、修改A端(左)的隔离级别为readcommitted;

set transactionisolation level read committed;

在A端开启事务:

starttransaction;

在B端开启事务

查看图片

3、在A端进行查询:

Select * fromstud;

在B端修改一行记录并提交

Update stud setname='itcast' where id=1;

再回到A端进行查询,发现在同一个事务内,两次查询的结果不一样:

查看图片

可重复读示例Repeatable Read

1、查看A端的隔离级别是否为Repeatableread级别:

Select@@tx_isolation;

2、先在A端在开启的事务内进行查询。

然后在B端修改数据库的内容。

最后再在A端的同一事务内进行查询,发现结果一致。

查看图片

Serializable是最高级的隔离级别

1、在A端设置隔离级别为Serializable

set transactionisolation level serializable;

在A端开启一个事务-并对stud表进行查询。

在B端开启一个事务,并写入一行记录。此时发现B的代码并没有执行,因为它在等A提交之后它才执行。

类似于线程同步的概念

查看图片

这四种隔离级别采取不同的锁类型来实现,若读取的是同一个数据的话,就容易发生问题。例如:

脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack(回滚)了操作,则后一个事务所读取的数据就会是不正确的。

不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。

幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

macOS Sierra安装Apache2.4+PHP7.0+MySQL5.7.16
Mac系统上虽然自带PHP和Apache,但是有时不是我们想要的版本呢。今天我们就在macOSSierra(10.12.1)上安装比较新的版本的PHP版本,也就是PHP7.0+了。本篇博客

MyBatis 如何写配置文件和简单使用
MyBatis如何写配置文件和简单使用MyBatis3.x这里简单贴一下MyBatis的介绍,具体使用方法会在代码中贴出。MyBatis的前世今生MyBatis的前身就是iBatis,iBatis本是

CentOS下重启Mysql的各种方法(推荐)
1、通过rpm包安装的MySQLservicemysqldrestart/etc/inint.d/mysqldstart2、从源码包安装的MySQL//Linux关闭MySQL的命令$mysql_dir/bin/mysqladmin-uroot-pshutdown//linux启动MySQL的命令$

本周排行

更新排行

强悍的草根IT技术社区,这里应该有您想要的! 友情链接:b2b电子商务
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号