解决并发事务造成的脏读,幻读,不可重复读问题:
Mysql的四种隔离级别.
未提交读(READ UNCOMMITTED):
在这个隔离级别下,其他事务可以看到本事务没有提交的部分修改,因此会造成脏读的问题(读取到了其他事务未提交的部分,而之后该事物进行回滚)
这个级别的性能没有足够大的优势,但是又有很多的问题,因此很少使用.
已提交读(READ COMMITTED):
其他事务只能读取到本事务已提交的部分,这个隔离级别有不可重复读的问题,在同一个事务内的两次读取,拿到的结果竟然不一样,因为另一个事务对数据进行了更改.
可重复读(REPEATABLE READ):
可重复读隔离级别解决了上面不可重复读的问题,但是仍然有一个新问题就是幻读,当你读取id>10的数据行时,对涉及到的所有行加上了读锁,此时另外一个事务新插入一条id=11的数据,因为是新插入的,所以不会触发上面的锁的排斥,那么进行本事务下的一次查询会发现有一条id=11的数据,而上次的查询操作并没有获取到,再进行插入就会有主键冲突的问题
可串行化(SERIALIZABLE):
这是最高的隔离级别,可以解决上面提到的所有问题,因为他强制将所有的操作串行执行,这会导致并发性能急速下降,因此也不常用.