事物的隔离级别
隔离级别从松到紧 ==> 读未提交,读提交 ,重复读,序列化。
读未提交
可能会出现脏读的情况
例子: 你去买5个包子。人多。店员拿的急多方一个,袋子里有6个,这个时候,你眼睛一瞟。心里美滋滋。付钱的时候老板检查了一下,发现多了一个,就拿走了一个,然后你付钱走人(提交事务)。这时候你就发现实际上袋子里只有5个,但是你认为他有6个。这就是脏读。
读提交
一个事物在读取时发现另外一个事物在修改,要等他提交修改事物后才能读取 可能出现不可重复读
例子: 你去买5个肉包子。人少生意不好,店员慢慢放了5个。你瞟了一眼(读取)。没毛病。但是这个时候员工为了自己能多拿点提成。偷偷摸摸吧一个肉包子换成了菜包子,现在袋子里是4个肉包子一个菜包子(修改事物),给到你手上(提交事务)。你老婆眼尖发现不对头。提醒你再去看下。你就发现你两次读取到的不一样(不可重复读)。
可重复读
在你读取事物的时候,不在允许修改事物。
例子: 你去买5个肉包子。人少生意不好,店员慢慢放了5个。你瞟了一眼(读取)。没毛病。但是这个时候员工为了自己能多拿点提成。想把一个肉包子换成菜包子(修改事物),这个时候老板发现了一顿训(系统发现报错)。但是员工不甘心。偷偷摸摸吧往袋子里多放了一个粽子,现在袋子里是5个肉包子一个粽子(新增事物),这是个奸商发现了但是允许(Repeatable read隔离规则)给到你手上(提交事务)。你老婆眼尖发现不对头。提醒你再去看下。你就发现你两次读取到的不一样(不可重复读)。
序列化
是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。