mysql 四个隔离级别的介绍
来源:互联网 发布:手机算命软件下载 编辑:程序博客网 时间:2024/06/04 18:47
myisam 不支持事务 ,innodb支持事务。我这次是用innodb做的测试。
1.查看及设置隔离级别
查看当前会话隔离级别select @@tx_isolation;查看系统当前隔离级别select @@global.tx_isolation;设置当前会话隔离级别set session transaction isolatin level repeatable read;(level后面是级别,设置成你想设置的就好了)设置系统当前隔离级别 set global transaction isolation level repeatable read;一般情况下设置当前就ok了
2.隔离级别的介绍
关于隔离级别的理解 1.read uncommitted 可以看到未提交的数据(脏读),举个例子 事务A开始进行操作user表,如果此时事务B往user表中更新了一条数据,就算它没有commit提交,这个时候事务A处查询,此时也查询出了事务B新增的未提交的数据。这种情况称为脏读。 2.read committed 读取提交的数据。但是,可能多次读取的数据结果不一致(不可重复读,幻读)。已提交读隔离级别解决了脏读的问题,但是出现了不可重复读的问题,即事务A在两次查询的数据不一致,因为在两次查询之间事务B更新了一条数据。已提交读只允许读取已提交的记录,但不要求可重复读。 3.repeatable read(MySQL默认隔离级别) 这个隔离级别的事务已经很可靠了。可以重复读取,但有幻读。读写观点:读取的数据行不可写,但是可以往表中新增数据。在MySQL中,其他事务新增的数据,看不到,不会产生幻读。采用多版本并发控制(MVCC)机制解决幻读问题。 4.serializable 这个级别慎用。。。 可读,不可写。像java中的锁,写数据必须等待另一个事务结束。 如果一个事务拿到了写锁。会阻塞所有其他的事务的写操作。。或造成大量的锁竞争和超时现象。。但是这个最安全。不会出现像前面说的那几种情况了,这完全就是串行了。
3.关于测试。
创建一个innodb的表,开两个命令行,在a窗口不断改变隔离级别。b窗口做辅助操作。 举例,验证read uncommitted 1.在A窗口设置隔离级别为read uncommitted。 2.在A窗口开启事务 start transaction 3.在A窗口查询你的innodb表。select * from table_name; 4.在b窗口开启事务 start transaction 5.在b窗口修改innodb表中的一条数据。 6.在a窗口查询你的innodb表。select * from table_name; 发现修改过的内容已经查询出来,和前面的查询结果不一致。这时候就出现了脏读现象。 验证 read committed 1.在A窗口设置隔离级别为read uncommitted。 2.在A窗口开启事务 start transaction 3.在A窗口查询你的innodb表。select * from table_name; 4.在B窗口开启事务 start transaction 5.在B窗口修改innodb表中的一条数据。 6.在A窗口查询你的innodb表。发现没有问题。 7.在B窗口commit,然后再去A窗口查询你的innodb表。select * from table_name;发现查询结果中已经有修改后的内容。这是出现了不可重复读现象。因为在事务A进行中,另一个事务可能操作过这条数据。造成这条数据不一致。 验证 repeatable read 和上面的类似,但是结果是不一致的,因为这个级别默认是可以隔离别的事务的,各个事务之间的修改不影响。包括insert数据。innnodb实现了mvcc来进行多版本并发控制(我还没有看呢。等我看了在写) 至于最稳定的serializable级别 某个事务开启,则它就拿到了写锁,其他事物,读取数据ok。写操作,则进入等待,直到这个事务提交,下个事务拿到锁。这个级别的慎用。
4.了解这些级别和他们会带来的问题后,看别的东西至少不会在疑惑了,这个真是。。加油吧。
参考文章
http://blog.csdn.net/jiangwei0910410003/article/details/24960785
http://xm-king.iteye.com/blog/770721
阅读全文
1 0
- mysql 四个隔离级别的介绍
- MYSQL隔离级别介绍
- 事物的四个隔离级别
- 数据库的四个隔离级别
- MySQL数据库事务的隔离级别介绍
- MYSQL事务——四个隔离级别
- mysql的事务四个特性以及事务的四个隔离级别
- 数据库事务的四个隔离级别浅析
- 事务的ACID和四个隔离级别
- Mysql 事务的四种隔离级别介绍
- 事物的四个特性和四个隔离级别
- 数据库的隔离级别介绍
- 数据库的隔离级别介绍
- 数据库的隔离级别介绍
- 测试Mysql的事务隔离隔离级别
- MySQL数据库的隔离级别
- MySQL的事务隔离级别
- mysql的事务隔离级别
- 在Fragment中嵌套Webview,第一次打开闪屏问题
- 一步一步制作yaffs/yaffs2根文件系统(六)---完善命令行提示符
- Redis设实
- angular2 npm start 报错
- POJ 3279 Fliptile(二进制枚举暴力)
- mysql 四个隔离级别的介绍
- 理解BPMN2.0(1)
- Linux系统下的进程键的通信
- webpack.config.js配置详解
- MAC使用IDA PRO远程调试LINUX程序
- python time时间格式化
- 算法竞赛入门——Cantor的数表
- h3c 配置 时钟
- RecyclerView Bug:IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter的解决方案