服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|

服务器之家 - 数据库 - Mysql - mysql 详解隔离级别操作过程(cmd)

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

2020-07-15 20:42mysql教程网 Mysql

这篇文章主要介绍了mysql 详解隔离级别操作过程(cmd)的相关资料,需要的朋友可以参考下

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

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

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

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

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

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

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

?
1
set transactionisolation level read uncommitted;

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

?
1
Set sessiontransaction isolation level read uncommitted;

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

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

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

?
1
starttransaction;

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

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

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

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

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

Rollback;

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

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

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

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

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

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

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

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

?
1
set transactionisolation level read committed;

   在A端开启事务:

   starttransaction;

   在B端开启事务

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

3、在A端进行查询:

?
1
Select * fromstud;

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

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

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

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

 可重复读示例Repeatable Read

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

Select@@tx_isolation;

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

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

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

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

 Serializable是最高级的隔离级别

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

?
1
set transactionisolation level serializable;

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

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

类似于线程同步的概念

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

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

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

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

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

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

延伸 · 阅读

精彩推荐
  • MysqlMySQL 主主同步配置步骤

    MySQL 主主同步配置步骤

    创建同步用户、修改 /etc/my.cnf 配置文件,为其添加以下内容、分别重启服务器ODD EVEN 上的mysql服务 ...

    MYSQL教程网3522019-12-24
  • MysqlMySQL 5.7并发复制隐式bug实例分析

    MySQL 5.7并发复制隐式bug实例分析

    这篇文章主要给大家介绍了关于MySQL 5.7并发复制隐式bug的相关资料,文中介绍的非常详细,对大家学习或者使用mysql5.7具有一定的参考学习价值,需要的朋...

    Rangle2912019-06-16
  • Mysqlmysql随机查询若干条数据的方法

    mysql随机查询若干条数据的方法

    这篇文章主要介绍了mysql中获取随机内容的方法,需要的朋友可以参考下 ...

    MYSQL教程网1832020-01-12
  • MysqlMySQL 数据库对服务器端光标的限制

    MySQL 数据库对服务器端光标的限制

    从MySQL 5.0.2开始,通过mysql_stmt_attr_set() C API函数实现了服务器端光标。服务器端光标允许在服务器端生成结果集,但不会将其传输到客户端,除非客户端请...

    mysql教程网2392019-10-26
  • MysqlMySQL中SQL模式的特点总结

    MySQL中SQL模式的特点总结

    这篇文章主要给大家总结介绍了关于MySQL中SQL模式特点的相关资料,文章介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    CrazyCodes4692019-06-26
  • MysqlMySQL 5.6 GTID新特性实践

    MySQL 5.6 GTID新特性实践

    GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号。下文给大家介绍MySQL 5.6 GTID新特性实践,感兴趣的朋友一起看看吧 ...

    MYSQL教程网1872020-06-27
  • Mysqlmysql误删root用户或者忘记root密码解决方法

    mysql误删root用户或者忘记root密码解决方法

    mysql误删root用户或者忘记root密码解决方法,需要的朋友可以参考下。 ...

    MYSQL教程网1622019-11-19
  • Mysqlmysql三种批量增加的性能分析

    mysql三种批量增加的性能分析

    最近在深入学习hibernate,在进行批量操作时,发现hibernate批量操作性能非常低.于是就想找一个性能较高的方法,在对jdbc、jdbcTemplate、hibernate进行测试后,发现...

    听雨轩2822019-12-06