Mysql 隔离级别和锁(一)
来源:互联网 发布:淘宝下单微信全额返现 编辑:程序博客网 时间:2024/05/23 01:33
成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。
1、事务的4大特征ACID
Atomicity Consistency Isolation Durability(原子、一致、隔离、持久)
2、四种隔离级别分别会产生的问题
ANSI/ISO SQL标准定义了4中事务隔离级别:未提交读(read uncommitted),提交读(read committed),重复读(repeatable read),串行读(serializable)。
对于不同的事务,采用不同的隔离级别分别有不同的结果。不同的隔离级别有不同的现象。主要有下面3种现象:
脏读(Drity Read)
某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。
示例:我们可以通过实例来具体的看一下什么叫做脏读,首先我们需要创建一个测试表 test
然后打开双窗口模拟迸发操作~
常用的命令:
查询事务的隔离级别,分别是:全局的、下次事务的、当前事务的隔离级别
show variables like '%storage_engine%'; 查看当前的mysql引擎show variables like 'autocommit'\G; 查看是否自动提交select @@global.tx_isolation,@@tx_isolation,@@session.tx_isolation; set session transaction isolation level READ UNCOMMITTED; 修改当前事务隔离级别
①、两个操作窗口同时开启事务,然后在右侧窗口更新其中的一条记录,左侧去查,我们看一下结果如何?
在此之前我们分别查一下当前事务的隔离级别是什么?
查询结果显示:
当前mysql的隔离级别是:**REPEATABLE-READ** 重复读,这种隔离级别也是大多数mysql的默认的隔离级别,现在我们先测试未提交读(**read uncommitted**),那么我们首先需要将数据库的隔离级别修改一下
方法如下:
set session transaction isolation level READ UNCOMMITTED;
我们在左边的事务中修改某一条记录,然后在右边的事务中我们去查询这条记录看一下会是什么样的结果?
右边事务中我们获取到的值为id=4的name=14,然后我们去回滚左边事务。
注意:在测试的过程中发现了一个bug,那就是我的事务居然没有生效?这是什么原因呢?
答案:在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作。因此开启一个事务必须使用begin,start transaction,或者执行 set autocommit=0;
才可以使用的事务控制语句。这块新手可能会遇到这个问题,需要注意一下。(还会有一种问题就是:一定要注意你所操作的当前表的存储引擎是什么?MYISAM不支持事务的,所以需要将表修改为innoDB,查看看方法:show create table test1; 修改方法:alter table test1 engin=innodb(老鸟一般都知道,只是建议小鸟们))
左边事务更新一条字段以后,查询表显示数据已经更新成功,右边事务查询表数据同样显示结果与左侧事务相同,然后我们回滚左边事务,再次查询发现数据还原了,右边事务查询结果显示数据跟上一次查询不一致,这就导致了右边事务之前所查询得到的数据是错误的数据,所以对于右边事务来说就造成了“脏读”。
后面演示请继续参考 Mysql 隔离级别和锁(二)
- Mysql 隔离级别和锁(一)
- Mysql 隔离级别和锁
- mysql--隔离级别和锁
- MySQL的事务隔离级别和锁
- MySQL中的隔离级别和锁机制
- MySQL事物(一)事务隔离级别和事物并发冲突
- MySQL事务和隔离级别
- mysql 隔离级别与锁
- MySQL 锁、事务隔离级别
- mysql 隔离级别与锁
- MySQL中的隔离级别和悲观锁及乐观锁
- MySql的隔离级别和锁的关系
- MySql的隔离级别和锁的关系
- 锁和隔离级别--mysql sql 20170526更新
- mysql innodb事务的隔离级别和锁的关系
- Mysql事务和隔离级别(read committed, repeatable read)
- 事务隔离级别和锁
- 事务隔离级别和锁
- K紧邻算法
- VS2015编译OpenCV2.4.13源码及配置
- mysql DELIMITER 问题
- Java数据结构之队列-使用数组实现队列
- hdu2888—Check Corners(二维RMQ)
- Mysql 隔离级别和锁(一)
- LinkedHashMap及其源码分析
- Spring Data操作Redis时,发现key值出现 \xac\xed\x00\x05t\x00\tb
- Linux上不了网
- 观察者模式
- CTF--信息技术对抗赛ISCC之安卓逆向分析
- Android 自定义的Dialog,点击确定按钮,让其根据条件判断消失与否
- Android 7.0调用相机方法
- 链表学习(5)