- 浏览: 567039 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 893原文地址:http://blog.csdn.net/ljunc ... -
amoeba实现mysql读写分离
2015-11-25 11:29 566原文地址:http://coolnull.com/1463.h ... -
Mysql繁忙主从库在线修改表结构与添加索引问题
2015-11-19 11:01 1470原文地址:http://www.itpub.net/threa ... -
mysql 主从复制双主架构在线修改表结构、在线DDL
2015-11-19 10:59 1082原文地址:http://blog.csdn.net/clh60 ... -
高性能Mysql主从架构的复制原理及配置详解
2015-11-19 10:09 846原文地址:http://blog.csdn ... -
MySQ索引操作命令总结(创建、重建、查询和删除索引命令详解)
2015-11-18 18:13 619原文地址:http://www.shangxueba.com/ ... -
数据库性能优化一:数据库自身优化
2015-11-12 15:57 485原文地址:http://www.cnblo ... -
mysql在一个表中存储创建时间和最近更新时间
2015-10-26 15:10 1117原文地址:http://blog.sina.com.cn/s/ ... -
Mysql 如何设置字段自动获取当前时间
2015-10-26 15:07 1041原文地址:http://www.cnblogs.com/lhj ... -
MySQL的create table as 与 like区别
2015-04-30 10:05 687原文地址:http://blog.csdn.net/longy ... -
Mysql 慢查询和慢查询日志分析
2015-04-21 12:01 669原文地址:http://www.cnblogs.com/wrm ... -
linux下mysql的root密码忘记解决方
2015-04-20 15:58 578原文地址:http://www.cnblogs.com/all ... -
手把手搭建sphinx环境
2015-04-20 10:53 783原文地址:http://blog.csdn.net/uestc ... -
【PHP征文】php 使用 sphinx 实现实时 innodb 全文索引
2015-04-20 10:51 1533原文地址:http://cloudbbs.org/forum. ... -
sphinx mysql innodb 联表数据源配置
2015-04-20 10:48 892原文地址:http://blog.phpdr.net/sphi ... -
mysql垂直分区和水平分区
2015-04-20 10:38 579原文地址:http://itsoul.iteye.com/bl ... -
jdbc---隔离级别
2015-03-26 17:27 541原文地址“http://z466459262.iteye.co ... -
数据库事务隔离级别
2015-03-26 17:10 490原文地址:http://blog.csdn.net/fg200 ... -
JDBC事务隔离级别
2015-03-26 14:04 549原文地址:http://blog.csdn ... -
mysql开发者sql权威指南
2015-03-19 15:43 400原文地址:http://www.r20.nl/SQLforMy ...
相关推荐
MySQL事务隔离级别是数据库管理系统中一个非常重要的概念,它关系到数据的一致性和并发性能。在MySQL中,事务被用于确保数据库操作的原子性、一致性、隔离性和持久性(ACID特性)。事务隔离级别主要涉及四个方面:读...
Mysql的四种隔离级别 Mysql的四种隔离级别 Mysql的四种隔离级别
MySQL 支持四种事务隔离级别:READ UNCOMMITTED(读未提交)、READ COMMITTED(读已提交)、REPEATABLE READ(可重复读)和 SERIALIZABLE(串行化)。每种隔离级别对应不同程度的事务并发问题的防范,其中,MySQL ...
MySQL数据库管理系统提供了四种事务隔离级别来处理事务并发中可能遇到的问题。事务并发问题通常包括脏读、不可重复读和幻读。 一、事务的基本要素(ACID) 事务具有四个基本要素,即原子性(Atomicity)、一致性...
查询:默认事务隔离级别 mysql> select @@tx_isolation;当前会话的默认事务隔离级别 mysql> select @@session.tx_isolation;当前会话的默认事务隔离级别 mysql> select @@global.tx_isolation;全局的事务隔离级别
事务隔离级别 课程目标 了解 —— 事务隔离级别的概念; 理解 —— 事务隔离的四种级别; 掌握 —— 事务隔离级别的设置; 事务隔离级别 事务隔离:每一个事务都有一个所谓的隔离级,它定义了用户彼此之间隔离和交互...
深入理解Mysql事务隔离级别与锁机制 Mysql事务隔离级别与锁机制是数据库系统中非常重要的概念,它们都是为了解决多事务并发问题而设计的。下面我们将深入讲解这些机制,让大家彻底理解数据库内部的执行原理。 事务...
MySQL数据库在处理并发事务时,采用了多种机制来确保数据的一致性和隔离性,其中关键的概念包括隔离级别、锁以及多版本并发控制(MVCC)。理解这些机制有助于优化数据库性能和解决并发冲突。 首先,隔离级别是...
来自一线大厂的MySQL lock 隔离级别的相关介绍,很赞,强烈推荐
MySQL的可重复读(RR)隔离级别是一种重要的事务隔离级别,旨在避免不可重复读和幻读问题,保证事务在并发环境下的一致性。ReadView(读视图)机制是实现这一隔离级别核心手段之一。本文将详细解析MySQL RR隔离级别...
本文将详细介绍MySQL的隔离级别,如何配置它们,以及不同隔离级别对数据库性能和并发能力的影响。 选择合适的隔离级别对于确保数据库的并发性能和数据一致性至关重要。通过理解不同隔离级别的特点和影响,数据库管理...
MySQL数据库的事务隔离级别是数据库管理系统中用于控制事务处理中并发操作的重要机制。在多用户同时访问数据库的情况下,事务隔离级别能够确保数据的一致性和完整性,避免并发操作带来的各种问题,如脏读、不可重复...
MySQL数据库在处理并发事务时,隔离级别和锁机制起着至关重要的作用,它们确保了数据的一致性和安全性。本文将详细探讨这两个概念及其在生产环境中的应用。 首先,`autocommit` 参数决定了MySQL是否会自动提交事务...
MySQL中的事务隔离级别是数据库管理系统确保事务之间相互独立的重要机制,它主要针对并发操作时可能出现的问题,如脏读、不可重复读和幻读等。在MySQL的InnoDB存储引擎中,有四种不同的事务隔离级别: 1. **读未...
MySQL 数据库中的事务隔离级别是确保数据库在高并发环境下数据一致性的重要机制。SQL 标准定义了四个隔离级别,它们分别是 Read Uncommitted、Read Committed、Repeatable Read 和 Serializable,每种级别都针对不同...
mysql 8.0.22 下载安装配置方法,供大家参考,具体内容如下 ... ... 您可能感兴趣的文章:mysql多版本并发控制MVCC的实现关于Mysql隔离级别、锁与MVCC介绍SpringBoot中通过实现WebMvcConfigurer参数
MySQL数据库隔离级别
Mysql事务隔离级别.docx