赞
踩
脏读:(dirty reads)
脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读出该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读到的数据是无效的。
脏读是指当一个事务正在访问数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问了这个数据,然后使用了这个数据,因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据就是脏数据,依据脏数据所做的操作可能是不正确的。
脏读(未提交读):防止一个事务读到另一个事务还没有提交的记录。
不可重复读:(non-repetable reads)
不可重复读:是指一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据,那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的,这样就发生了在一个事务内两次读到的数据是不一样的,因此称为不可重复读。
不可重复读的重点是修改:同样的条件,你读取过的数据,再次读取出来值就会不一样了。
幻度:
幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行修改,这种修改涉及到表中的全部数据行,同时。第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据,那么,以后就会发生操作第一个事务的用户发现表中还没有修改的数据行,这就好像发生幻觉。
幻读的重点在于新增或者删除:同样的条件,第一次和第二次读出来的记录数不一样。
丢失更新(乐观锁,悲观锁):
乐观锁:乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下不依靠数据库的锁机制实现,以保证操作最大程度的独占性,但随之而来的就是数据性能的大量开销,特别是对长事务而言。相对‘悲观而言,乐观的锁更倾向于开发运用,乐观锁大多是基于数据版本记录制实现。。
优点:乐观锁机制避免了长事务中数据加锁开销(操作员A和B的操作过程都没有对数据库数据加锁)大大提升了大并发量下的系统整体性能体现。
悲观锁:具有强烈的独占和排他性能,他指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态,悲观锁的实现,往往依靠数据库提供的锁机制(只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)
Spring声明式事务:
Isolation属性一共支持五种事务机制:
DEFAVLT使用数据库设置的隔离级别(默认),由DBA默认的设置来决定隔离级别。
READ_UNCOMMITTED会出现脏读,不可重复读,幻读(隔离级别最低,并发性能最高)
READ_COMMITTED会出现不可重复读,幻读问题(锁定正在读取的行)
REPEATABLE_READ会出幻读(锁定所读取的所有行)
SERISLIZABLE保证所有的情况下不会发生(锁表)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。