数据库隔离级别数据库
目的:保证事务并发读取数据的正确性并发
(1)Read uncommitted(读未提交数据):容许事务读取未被其余事务提交的变动数据,会出现脏读、不可重复读和虚读。性能
(2)Read committed(读已提交数据):只容许事务读取已经被其余事务提交的变动数据,可避免脏读,仍会有不可重复读和虚读spa
(3)Repeatable read(可重复读):确保事务能够屡次从一个字段中读取相同的值,在此事务持续期间,禁止其余事务对此字段的更新,可避免脏读、不可重复读仍会有虚读。事务
(4)Serializable(序列化):确保事务能够从一个表中读取相同的行,在事务持续期间,禁止其余事务对该表执行插入、更新和删除操做,可避免全部并发问题,但性能低。it
MySQL支持四种事务隔离级别,其中REPEATABLE READ为默认事务隔离级别。table
设置说明:隔离级别越高,越能保证数据的完整性和一致性,但对并发性的影响越大。对于大多数应用程序,数据库系统的隔离级别设为ReadCommitted。能避免脏读取,并且具备较好的并发性能。对于不可重复读、虚读和第二类丢失更新这些并发问题,采用悲观锁或乐观锁。select
悲观锁和乐观锁序列化
悲观锁:每次拿数据时怕别人会修改,因此都会先上锁,当其余事务要访问该数据时就会阻塞。通常用在表锁、行锁、读锁和写锁,在操做前先上锁。程序
乐观锁:每次拿数据时认为别人不会修改,不会上锁,但在更新时会先判断一下在此期间别人是否有更新该数据,能够使用版本号等机制。
适用于:读取多、写少的状况,能够提升吞吐量。
(1)Uncommitted read(UR——未提交读)
读取数据时,对表加IN表锁,而不会对数据行加锁。修改数据时,则在数据上加X锁以及相应表级别锁(修改操做与CS处理相同)。
并发性:丢失更新、脏读、不可重复读和虚读都有可能发生
(2)Cursor stability(CS——游标稳定性)默认级别:仅锁住当前处理的记录
锁定游标定位的当前行。读取加NS锁,修改加X锁,带有修改的查询加U锁。锁定持续到读取下一条或事务结束。
并发性:丢失更新和脏读不会发生;但有可能出现不可重复读和虚读。
(3)Read statility(RS——读稳定性)
只是锁定事务实际检索和修改的行(读取的话加NS,修改的话加X,有修改意向加U)
并发性:丢失更新、脏读、不可重复读不会发生;但有可能出现虚读。
(4)Repeatable read(RR)
会对select的全部行加锁,对全部扫描的行加锁
并发性:丢失更新、脏读、不可重复读和虚读都不会发生