首页 > 代码库 > 数据库事务隔离级别总结
数据库事务隔离级别总结
一、mysql 默认隔离级别是 repeatable read
1.在一个事务中两次查询一条记录,结果总是事务开始前的值。不管是否有另外的事务改变这条记录,
2.在一个事务中如果保存记录,
1)如果这条记录已经被另外一个已经结束的事务改变了,本事务会把这条记录覆盖。
2)如果另外一个事务先改这条记录,并且没提交,本事务会卡住,等待。直到另外一个事务结束,本事务继续运行。修改影响到0条记录,也就是不会改变数据(相当于修改失败,白改了。)(避免第二类更新丢失)
二、oracle默认read commited
1.一个事务两次查询可能不一样。总是能查询到最新的。
2.在一个事务中如果保存记录,
1)如果这条记录已经被另外一个已经结束的事务改变了,本事务会把这条记录覆盖。与mysql相同。
2)如果另外一个事务先改这条记录,并且没提交,本事务会卡住,等待。直到另外一个事务结束,本事务继续运行。不同的是本次修改会影响到的记录不为0,也就是修改会生效(覆盖掉第一个事务的修改)。(第二类更新丢失)
mysql的测试代码
-- ------------------------------ 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;
数据库事务隔离级别总结
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。