码迷,mamicode.com
首页 > 数据库 > 详细

数据库事务隔离级别总结

时间:2014-12-05 19:06:52      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

一、mysql 默认隔离级别是 repeatable read
1.在一个事务中两次查询一条记录,结果总是事务开始前的值。不管是否有另外的事务改变这条记录,
2.在一个事务中如果保存记录,

1)如果这条记录已经被另外一个已经结束的事务改变了,本事务会把这条记录覆盖。

2)如果另外一个事务先改这条记录,并且没提交,本事务会卡住,等待。直到另外一个事务结束,本事务继续运行。修改影响到0条记录,也就是不会改变数据(相当于修改失败,白改了。)(避免第二类更新丢失)

二、oracle默认read commited
1.一个事务两次查询可能不一样。总是能查询到最新的。
2.在一个事务中如果保存记录,

1)如果这条记录已经被另外一个已经结束的事务改变了,本事务会把这条记录覆盖。与mysql相同。

2)如果另外一个事务先改这条记录,并且没提交,本事务会卡住,等待。直到另外一个事务结束,本事务继续运行。不同的是本次修改会影响到的记录不为0,也就是修改会生效(覆盖掉第一个事务的修改)。(第二类更新丢失)

mysql的测试代码

bubuko.com,布布扣
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES (1, 5);
INSERT INTO `test` VALUES (2, 3);
SELECT @@tx_isolation;
SELECT @@global.tx_isolation;

set session transaction isolation level read committed;
set session transaction isolation level read uncommitted;
set session transaction isolation level  repeatable read;

set global transaction isolation level read committed;
set global transaction isolation level read uncommitted;
set global transaction isolation level  repeatable read;

start transaction;
select * from test;
update test set name=2 where id=2;
select * from test;
commit;
View Code

 

数据库事务隔离级别总结

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/no5element/p/4147297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!