- 浏览: 545518 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (618)
- java (109)
- Java web (43)
- javascript (52)
- js (15)
- 闭包 (2)
- maven (8)
- 杂 (28)
- python (47)
- linux (51)
- git (18)
- (1)
- mysql (31)
- 管理 (1)
- redis (6)
- 操作系统 (12)
- 网络 (13)
- mongo (1)
- nginx (17)
- web (8)
- ffmpeg (1)
- python安装包 (0)
- php (49)
- imagemagic (1)
- eclipse (21)
- django (4)
- 学习 (1)
- 书籍 (1)
- uml (3)
- emacs (19)
- svn (2)
- netty (9)
- joomla (1)
- css (1)
- 推送 (2)
- android (6)
- memcached (2)
- docker、 (0)
- docker (7)
- go (1)
- resin (1)
- groovy (1)
- spring (1)
最新评论
-
chokee:
...
Spring3 MVC 深入研究 -
googleyufei:
很有用, 我现在打算学学Python. 这些资料的很及时.
python的几个实用网站(转的) -
hujingwei1001:
太好了找的就是它
easy explore -
xiangtui:
例子举得不错。。。学习了
java callback -
幻影桃花源:
太好了,謝謝
Spring3 MVC 深入研究
原文地址:http://blog.csdn.net/taylor_tao/article/details/7063639
事务具有ACID四种特性。
但是Isolation并发可能引起如下问题:
1.脏读
允许读取到未提交的脏数据。
2.不可重复读
如果你在时间点T1读取了一些记录,在T2时再想重新读取一次同样的这些记录时,这些记录可能已经被改变、或者消失不见。
3.幻读
解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。但是,如果另一个事务同时提交了新数据,本事务再更新时,就会“惊奇的”发现了这些新数据,貌似之前读到的数据是“鬼影”一样的幻觉。
由ANSI/ISO定义的SQL-92标准定义的四种隔离级别
1.Read Uncommitted
2.Read Committed
3.Repeatable Read
4.Serializable
隔离解别 脏读 不可重复读 幻读
Read Uncommitted Y Y Y
Read Committed N Y Y
Repeatable(default) N N Y
Serializable N N N
下面用Mysql数据库做一些小实验
Mysql 版本号
[sql] view plaincopy
mysql> select version();
+------------+
| version() |
+------------+
| 5.1.52-log |
+------------+
1 row in set (0.00 sec)
查看InnoDB存储引擎 系统级的隔离级别 和 会话级的隔离级别
[sql] view plaincopy
mysql> select @@global.tx_isolation,@@tx_isolation;
+-----------------------+-----------------+
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+
| REPEATABLE-READ | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)
更改会话级的隔离级别
[sql] view plaincopy
Session 1:
mysql> set session tx_isolation='read-uncommitted';
Query OK, 0 rows affected (0.00 sec)
mysql> select @@global.tx_isolation,@@tx_isolation;
+-----------------------+------------------+
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+------------------+
| REPEATABLE-READ | READ-UNCOMMITTED |
+-----------------------+------------------+
1 row in set (0.00 sec)
Session 2:
mysql> select @@global.tx_isolation, @@tx_isolation;
+-----------------------+-----------------+
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+
| REPEATABLE-READ | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)
更改系统级的隔离级别
[sql] view plaincopy
Session 1:
mysql> set global tx_isolation='read-uncommitted';
Query OK, 0 rows affected (0.00 sec)
mysql> select @@global.tx_isolation,@@tx_isolation;
+-----------------------+------------------+
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+------------------+
| READ-UNCOMMITTED | READ-UNCOMMITTED |
+-----------------------+------------------+
1 row in set (0.00 sec)
Session 2:
mysql> select @@global.tx_isolation, @@tx_isolation;
+-----------------------+-----------------+
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+
| READ-UNCOMMITTED | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)
关闭SQL语句的自动提交
[sql] view plaincopy
mysql> set autocommit=off;
Query OK, 0 rows affected (0.00 sec)
查看SQL语句自动提交是否关闭
[plain] view plaincopy
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set (0.00 sec)
建立实验表
[sql] view plaincopy
mysql> create table tao (col1 tinyint unsigned, col2 varchar(20), primary key(col1));
Query OK, 0 rows affected (0.08 sec)
mysql> show create table tao \G;
*************************** 1. row ***************************
Table: tao
Create Table: CREATE TABLE `tao` (
`col1` tinyint(3) unsigned NOT NULL DEFAULT '0',
`col2` varchar(20) DEFAULT NULL,
PRIMARY KEY (`col1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
演示脏读
更改隔离级别为Read Committed后,不存在脏读的问题。
[sql] view plaincopy
mysql> set global tx_isolation='read-committed';
Query OK, 0 rows affected (0.00 sec)
mysql> set session tx_isolation='read-committed';
Query OK, 0 rows affected (0.00 sec)
演示不可重复读
更改隔离级别为Repeatable Read后,不存在不可重复读的问题。
[sql] view plaincopy
mysql> set global tx_isolation='repeatable-read';
Query OK, 0 rows affected (0.00 sec)
mysql> set session tx_isolation='repeatable-read';
Query OK, 0 rows affected (0.00 sec)
幻读
更改隔离级别为完全串行化 Serializable 后,不存在幻读的问题。
[sql] view plaincopy
mysql> set global tx_isolation='serializable';
Query OK, 0 rows affected (0.00 sec)
mysql> set session tx_isolation='serializable';
Query OK, 0 rows affected (0.00 sec)
在这种情况下,只允许一个事务在执行,其它事务必须等待这个事务执行完后才能执行。没有并发,只是单纯的串行。
事务具有ACID四种特性。
但是Isolation并发可能引起如下问题:
1.脏读
允许读取到未提交的脏数据。
2.不可重复读
如果你在时间点T1读取了一些记录,在T2时再想重新读取一次同样的这些记录时,这些记录可能已经被改变、或者消失不见。
3.幻读
解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。但是,如果另一个事务同时提交了新数据,本事务再更新时,就会“惊奇的”发现了这些新数据,貌似之前读到的数据是“鬼影”一样的幻觉。
由ANSI/ISO定义的SQL-92标准定义的四种隔离级别
1.Read Uncommitted
2.Read Committed
3.Repeatable Read
4.Serializable
隔离解别 脏读 不可重复读 幻读
Read Uncommitted Y Y Y
Read Committed N Y Y
Repeatable(default) N N Y
Serializable N N N
下面用Mysql数据库做一些小实验
Mysql 版本号
[sql] view plaincopy
mysql> select version();
+------------+
| version() |
+------------+
| 5.1.52-log |
+------------+
1 row in set (0.00 sec)
查看InnoDB存储引擎 系统级的隔离级别 和 会话级的隔离级别
[sql] view plaincopy
mysql> select @@global.tx_isolation,@@tx_isolation;
+-----------------------+-----------------+
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+
| REPEATABLE-READ | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)
更改会话级的隔离级别
[sql] view plaincopy
Session 1:
mysql> set session tx_isolation='read-uncommitted';
Query OK, 0 rows affected (0.00 sec)
mysql> select @@global.tx_isolation,@@tx_isolation;
+-----------------------+------------------+
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+------------------+
| REPEATABLE-READ | READ-UNCOMMITTED |
+-----------------------+------------------+
1 row in set (0.00 sec)
Session 2:
mysql> select @@global.tx_isolation, @@tx_isolation;
+-----------------------+-----------------+
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+
| REPEATABLE-READ | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)
更改系统级的隔离级别
[sql] view plaincopy
Session 1:
mysql> set global tx_isolation='read-uncommitted';
Query OK, 0 rows affected (0.00 sec)
mysql> select @@global.tx_isolation,@@tx_isolation;
+-----------------------+------------------+
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+------------------+
| READ-UNCOMMITTED | READ-UNCOMMITTED |
+-----------------------+------------------+
1 row in set (0.00 sec)
Session 2:
mysql> select @@global.tx_isolation, @@tx_isolation;
+-----------------------+-----------------+
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+
| READ-UNCOMMITTED | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)
关闭SQL语句的自动提交
[sql] view plaincopy
mysql> set autocommit=off;
Query OK, 0 rows affected (0.00 sec)
查看SQL语句自动提交是否关闭
[plain] view plaincopy
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set (0.00 sec)
建立实验表
[sql] view plaincopy
mysql> create table tao (col1 tinyint unsigned, col2 varchar(20), primary key(col1));
Query OK, 0 rows affected (0.08 sec)
mysql> show create table tao \G;
*************************** 1. row ***************************
Table: tao
Create Table: CREATE TABLE `tao` (
`col1` tinyint(3) unsigned NOT NULL DEFAULT '0',
`col2` varchar(20) DEFAULT NULL,
PRIMARY KEY (`col1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
演示脏读
更改隔离级别为Read Committed后,不存在脏读的问题。
[sql] view plaincopy
mysql> set global tx_isolation='read-committed';
Query OK, 0 rows affected (0.00 sec)
mysql> set session tx_isolation='read-committed';
Query OK, 0 rows affected (0.00 sec)
演示不可重复读
更改隔离级别为Repeatable Read后,不存在不可重复读的问题。
[sql] view plaincopy
mysql> set global tx_isolation='repeatable-read';
Query OK, 0 rows affected (0.00 sec)
mysql> set session tx_isolation='repeatable-read';
Query OK, 0 rows affected (0.00 sec)
幻读
更改隔离级别为完全串行化 Serializable 后,不存在幻读的问题。
[sql] view plaincopy
mysql> set global tx_isolation='serializable';
Query OK, 0 rows affected (0.00 sec)
mysql> set session tx_isolation='serializable';
Query OK, 0 rows affected (0.00 sec)
在这种情况下,只允许一个事务在执行,其它事务必须等待这个事务执行完后才能执行。没有并发,只是单纯的串行。
发表评论
-
使用amoeba 数据库端出现 ERROR 1044 (42000):
2015-11-25 11:29 862原文地址:http://blog.csdn.net/ljunc ... -
amoeba实现mysql读写分离
2015-11-25 11:29 525原文地址:http://coolnull.com/1463.h ... -
Mysql繁忙主从库在线修改表结构与添加索引问题
2015-11-19 11:01 1429原文地址:http://www.itpub.net/threa ... -
mysql 主从复制双主架构在线修改表结构、在线DDL
2015-11-19 10:59 1041原文地址:http://blog.csdn.net/clh60 ... -
高性能Mysql主从架构的复制原理及配置详解
2015-11-19 10:09 800原文地址:http://blog.csdn ... -
MySQ索引操作命令总结(创建、重建、查询和删除索引命令详解)
2015-11-18 18:13 582原文地址:http://www.shangxueba.com/ ... -
数据库性能优化一:数据库自身优化
2015-11-12 15:57 452原文地址:http://www.cnblo ... -
mysql在一个表中存储创建时间和最近更新时间
2015-10-26 15:10 1074原文地址:http://blog.sina.com.cn/s/ ... -
Mysql 如何设置字段自动获取当前时间
2015-10-26 15:07 1002原文地址:http://www.cnblogs.com/lhj ... -
MySQL的create table as 与 like区别
2015-04-30 10:05 647原文地址:http://blog.csdn.net/longy ... -
Mysql 慢查询和慢查询日志分析
2015-04-21 12:01 623原文地址:http://www.cnblogs.com/wrm ... -
linux下mysql的root密码忘记解决方
2015-04-20 15:58 537原文地址:http://www.cnblogs.com/all ... -
手把手搭建sphinx环境
2015-04-20 10:53 724原文地址:http://blog.csdn.net/uestc ... -
【PHP征文】php 使用 sphinx 实现实时 innodb 全文索引
2015-04-20 10:51 1490原文地址:http://cloudbbs.org/forum. ... -
sphinx mysql innodb 联表数据源配置
2015-04-20 10:48 858原文地址:http://blog.phpdr.net/sphi ... -
mysql垂直分区和水平分区
2015-04-20 10:38 544原文地址:http://itsoul.iteye.com/bl ... -
jdbc---隔离级别
2015-03-26 17:27 501原文地址“http://z466459262.iteye.co ... -
数据库事务隔离级别
2015-03-26 17:10 457原文地址:http://blog.csdn.net/fg200 ... -
JDBC事务隔离级别
2015-03-26 14:04 509原文地址:http://blog.csdn ... -
mysql开发者sql权威指南
2015-03-19 15:43 358原文地址:http://www.r20.nl/SQLforMy ...
相关推荐
Mysql的四种隔离级别 Mysql的四种隔离级别 Mysql的四种隔离级别
NULL 博文链接:https://cuishuangjia.iteye.com/blog/964885
查询:默认事务隔离级别 mysql> select @@tx_isolation;当前会话的默认事务隔离级别 mysql> select @@session.tx_isolation;当前会话的默认事务隔离级别 mysql> select @@global.tx_isolation;全局的事务隔离级别
52 MySQL是如何支持4种事务隔离级别的?Spring事务注解是如何设置的?l.pdf
本篇文章给大家详细介绍了一下关于Mysql隔离级别、锁与MVCC的相关知识,有这方面兴趣的朋友参考下。
MySQL事务隔离级别详解,这个面试经常会面到,必会呀,哈哈
MySQL的四种事务隔离级别 1、脏读 2、不可重复读 3、幻读
来自一线大厂的MySQL lock 隔离级别的相关介绍,很赞,强烈推荐
06-VIP-深入理解Mysql事务隔离级别与锁机制.pdf
数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为 Read uncommitted:允许脏读。 Read committed: 防止脏读,最常用的隔离级别,并且是大多数数据库的默认隔离级别。 Repeatable read:可以防止脏...
MySQL的四种事务隔离级别:Read-uncommitted、Read-committed、Repeatable-read、Seriailizable,相信大家都清楚各自异同,不清楚的朋友可以查看另外一篇技术文章:MySQL_InnoDB之事务与锁详解。但是对于第二类、第...
事务隔离级别 课程目标 了解 —— 事务隔离级别的概念; 理解 —— 事务隔离的四种级别; 掌握 —— 事务隔离级别的设置; 事务隔离级别 事务隔离:每一个事务都有一个所谓的隔离级,它定义了用户彼此之间隔离和交互...
56 MySQL最牛的RR隔离级别,是如何基于ReadView机制实现的?l.pdf
mysql 8.0.22 下载安装配置方法,供大家参考,具体内容如下 ... ... 您可能感兴趣的文章:mysql多版本并发控制MVCC的实现关于Mysql隔离级别、锁与MVCC介绍SpringBoot中通过实现WebMvcConfigurer参数
MySQL数据库隔离级别
Mysql事务隔离级别.docx
1.MySQL参数autocommit生产环境设1还是0?为什么? 在生产环境中,为了事务一致性,需要把autocommit 设置为 0 这样可以进行事务全部成功后,在后一次性提交,如果某一步出错,可以rollback。 在会话进修改...
MySQL事务隔离级别详解.docx
详解Mysql事务隔离级别与锁机制.doc