数据库隔离级别
事务隔离是多个事务同时进行时的隔离。它们之间的相互影响与隔离级别有关
数据库隔离级别数据库事务的隔离级别有4个,分别是读未提交(可能出现脏读、不可重复读、幻读)、读已提交(可能出现不可重复读、幻读)、可重复读(可能出现幻读)、可串形化。隔离级别越来越高,事务之间的影响越来越小,效率越来越低
读未提交
举个例子:两个窗口卖最后一张票,第一个窗口有一个人买票,但是该事务未提交。第二个窗口另一个人再买票发现票已经有人买,然后就离开了。结果第一个窗口的人不买了,于是回滚了事务并提交,最后票没卖出去。
上述情况中,第二个窗口的人读到的"票已经有人买了"是一个脏数据,它并不是最后事务提交的数据。因此读未提交可能会出现脏读的情况。
读已提交
它解决了上面脏读的情况
举个例子:A拿银行卡消费,查询卡里有100元钱。同时B将该卡的100元转走,在A之前提交了事务,当A进行消费时,扣款失败。
也就是说,A先读数据,B跟着更新了数据并提交了事务,当A再次读取数据时,数据已经发生变化,这就是所谓的不可重复读。Oracle默认为读已提交
可重复读
它保证同一事务中只会读取到当前事务对数据的修改,其它事务修改的数据不会影响当前事务的读取。(意为可重复读到相同的东西)
也就是在上述情况下,当A拿银行卡消费时,B不能进行转账。
但是在这个级别下,还可能出现幻读的情况。
幻读的例子:比如当前有20元钱,A事务查询钱数得到20,此时B事务更新了钱数为0并提交了事务。然后A事务执行更新update操作,然后再查询钱数得到0。mysql默认为读已提交
可串形化
串形将所有的事务一个一个的进行,所以穿行化的事务隔离级别不会出现脏读、不可重复读、幻读等问题。代价就是性能特别低
如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢