4

事务的隔离级别

数据库事务的隔离级别有4个,由低到高依次为Read Uncommitted(RU)、Read Committed(RC)、Repeatable Read(RR)、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。
√: 可能出现 ×: 不会出现

** 脏读 不可重复读 幻读
Read uncommitted
Read committed ×
Repeatable read × ×
Serializable × × ×

MySQL事务(InnoDB)的默认隔离级别为RR,另外MySQL通过MVCC(多版本并发控制)技术解决了环读的问题。

然后我们来看个简单而Happy的小栗子:

原料

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'wang');
INSERT INTO `user` VALUES ('2', 'meng');
INSERT INTO `user` VALUES ('3', 'salamander');

操作

Client 1
开启事务后查询数据

clipboard.png

Client 2
开启事务,改变数据

clipboard.png

然后在Client 1中再次查询

clipboard.png

发现查询数据还是不变

Client 2提交事务

clipboard.png

再次在Client 1中查询数据

clipboard.png

发现查询数据还是不变,(~。。~)

然后,你可以想象了,为什么这样呢?


ufdf
6.7k 声望407 粉丝