首页 / MYSQL / Mysql事务隔离级别_MySQL
Mysql事务隔离级别_MySQL
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mysql事务隔离级别_MySQL,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4048字,纯文字阅读大概需要6分钟。
内容图文
![Mysql事务隔离级别_MySQL](/upload/InfoBanner/zyjiaocheng/580/5fa1d964053e4d3e85177ab2db328379.jpg)
scott@PROD>select * from dept1;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
50 OPERATIONS BOSTON
20 DBA Bei Jing
scott@PROD>update dept1 set deptno=21 where dname='DBA';
1 row updated.
scott@PROD>SELECT s.sid, s.serial#,
2 CASE BITAND(t.flag, POWER(2, 28))
3 WHEN 0 THEN 'READ COMMITTED'
4 ELSE 'SERIALIZABLE'
5 END AS isolation_level
6 FROM v$transaction t
7 JOIN v$session s ON t.addr = s.taddr
8 AND s.sid = sys_context('USERENV', 'SID');
SID SERIAL# ISOLATION_LEVE
---------- ---------- --------------
41 5973 READ COMMITTED
Oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。
而Mysql支持READ UNCOMMITED,READ COMMITED,REPEATABLE READ,SERIALIZABLE四种事务隔离级别READ UNCOMMITTED(读取未提交内容)
在read uncommitted隔离级别,所有事物都可以”看到”未提交事物的执行结果。也就是脏读(读取未提交事务)READ COMMITED (读取提交内容)
ORACLE的默认隔离级别。一个事物开始时,只能”看见”已经提交事务所做的改变,一个事务从开始提交前,所做的任何数据改变都是不可见的,除非已经提交。这种隔离级别也就是不可重复读REPEATABLE READ (可重读)
repeatable read隔离级别解决了read uncommitted隔离级导致的问题。它确保同一事务的做个实例在并发读取数据时,会”看到”同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读。简单来说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了薪行,当用户再读取该范围的数据行时,会发现有新的”还原”行。SERIALIZABLE (可串行化)
serializable是最高级别的隔离级,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。
Mysql默认的隔离级别是:
(mysql@localhost) [fandb]> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
session A:
(mysql@localhost) [fandb]> begin;
Query OK, 0 rows affected (0.00 sec)
(mysql@localhost) [fandb]> update per1 set name='fan1' where id=1
-> ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
(mysql@localhost) [fandb]> select * from per1 limit 1;
+----+------+
| id | name |
+----+------+
| 1 | fan1 |
+----+------+
1 row in set (0.00 sec)
A会话更新一行
session B:
(mysql@localhost) [fandb]> begin;
Query OK, 0 rows affected (0.00 sec)
(mysql@localhost) [fandb]> select * from per1 limit 1;
+----+------+
| id | name |
+----+------+
| 1 | fan |
+----+------+
1 row in set (0.00 sec)
此时在B开始事务并查询,id=1的name列并没有变化
session A:
(mysql@localhost) [fandb]> commit;
Query OK, 0 rows affected (0.00 sec)
接着A会话提交
session B:
(mysql@localhost) [fandb]> select * from per1 limit 1;
+----+------+
| id | name |
+----+------+
| 1 | fan |
+----+------+
1 row in set (0.00 sec)
在去B会话查询,还是没有变化
(mysql@localhost) [fandb]> commit;
Query OK, 0 rows affected (0.00 sec)
(mysql@localhost) [fandb]> select * from per1 limit 1;
+----+------+
| id | name |
+----+------+
| 1 | fan1 |
+----+------+
1 row in set (0.00 sec)
只有当B会话事务结束,再次查询记录才会变化
![](http://www.gxlcms.com/Public/aiod/ts.jpg)
mysql热搜
- 详细讲解mysql的存储过程、游标、事务
- sqlserver:alterdatabasename的问题
- mysql中DAO模式
- MySQL5.5.27的安装详解(图文)
- mysql怎么将多行数据合并成一行
- consul架构的MHA自动切换实例详解
- mysql_stat的10篇内容推荐
- 关于派生表的详细介绍
- 关于Mysql如何将数据分组后取出时间最近的数据详解
- MySQL优化原理
- 删除表的sql语句在不同数据库中的写法详解
- MySQL中insert触发器(插入)详解
- MySQL事务-使用保留点、更改默认的提交行为详解
- mysql高级联结-自联结使用实例
- mysqlinnodb异常修复过程实例
- 详细介绍MySQL5.7zip版本安装配置图文教程
- 具体介绍MySql经常使用语句的全面总结
- Mysql分析-常用分析语句总结
- sql中的iif语句详解
- MySQL数据库中timestamp自动更新时间的方法
- mysql教程:使用SELECTINTO进行备份
- mysql中的锁问题
- Mysql生成固定位数的随机数
- Centos下Mysql安装图文教程_MySQL
- 金额大写转小写SQL
![](http://www.gxlcms.com/ad/tx500x500.jpg)