事务的隔离级别就是来解决并发安全问题的:SERIALIZABLE最安全,因为它的锁的粒度最大,直接会锁表。也导致了它执行起来效率最低
spring默认采用的DEFAULT隔离级别,也就是采用数据库默认的隔离级别,
Mysql默认采用REPEATABLE_READ.ORACLE默认采用READ_COMMITTED隔离级别
org.springframework.transaction.TransactionDefinition 事务定义,包含事务的隔离级别、传播行为。
事务的四大特性:原子性、一致性(执行事务前后的数据完整性保持一致)、隔离性、持久性;
如果不考虑隔离性,会引发安全问题如下:脏读、不可重复读、幻读(虚读)
脏读:一个事务读取到另一个事务改写了但没有提交的数据;
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同(读取到另一个事务提交的数据)
幻读(虚读)读取到另一个事务插入的一些记录
9999999999999999999999
77777777777777777777777777
123456
脏读:一个事务读取另一个事务改写但未提交的数据
如果这些数据被回滚,则读到的数据是无效的
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同
同一个事务中,读到另一个事务提交的数据?,导致不一致
幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了,后来的查询中,第一个事务就会发现有些原来没有的记录
四种隔离级别就是解决以上问题
DEFAULT
READ_UNCOMMITED
READ_COMMITED
REPEATABLE_READ
脏读:一个事务读取另一个事务改写但未提交的数据
如果这些数据被回滚,则读到的数据是无效的
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同
同一个事务中,读到另一个事务提交的数据,导致不一致
幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了,后来的查询中,第一个事务就会发现有些原来没有的记录
隔离级别
脏读:一个事务读取另一个事务改写但未提交的数据
如果这些数据被回滚,则读到的数据是无效的
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同
同一个事务中,读到另一个事务提交的数据,导致不一致
幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了,后来的查询中,第一个事务就会发现有些原来没有的记录
四种隔离级别就是解决以上问题
隔离级别
脏读:一个事务读取另一个事务改写但未提交的数据
如果这些数据被回滚,则读到的数据是无效的
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同
同一个事务中,读到另一个事务提交的数据,导致不一致
幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了,后来的查询中,第一个事务就会发现有些原来没有的记录
四种隔离级别就是解决以上问题
DEFAULT
READ_UNCOMMITED
READ_COMMITED
REPEATABLE_READ
SERIALIZABLE
隔离级别
脏读:一个事务读取另一个事务改写但未提交的数据
如果这些数据被回滚,则读到的数据是无效的
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同
同一个事务中,读到另一个事务提交的数据,导致不一致
幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了,后来的查询中,第一个事务就会发现有些原来没有的记录
四种隔离级别就是解决以上问题
DEFAULT
READ_UNCOMMITED
READ_COMMITED
REPEATABLE_READ
SERIALIZABLE
隔离级别
脏读:一个事务读取另一个事务改写但未提交的数据
如果这些数据被回滚,则读到的数据是无效的
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同
同一个事务中,读到另一个事务提交的数据,导致不一致
幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了,后来的查询中,第一个事务就会发现有些原来没有的记录
四种隔离级别就是解决以上问题
DEFAULT
READ_UNCOMMITED
READ_COMMITED
REPEATABLE_READ
SERIALIZABLE
TransactionDefinition定义事务隔离级别
事务的隔离级别 4种
幻读,读取的数据不完整
不可重复读
脏读,读到了其他没有提交的数据
TransaxtionDefinition 定义事务隔离级别
TransactionDefinition定义事务隔离级别
TransactionDefinition接口:通过Spring的API可以知道该接口提供了一组常量。
如下图以ISOLATION开头的五个隔离级别。
如下图以PROPAGATION_MANDATORY开头的7个传播行为。
如下图以TIMEOUT开头的超时信息
该接口还提供了一些方法,例如:获得隔离级别、获得超时信息、获得是否只是只读的等。
如果不考虑隔离性,就会引发安全问题:脏读、不可重复读、以及虚读或者叫做幻读。
脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。
不可重复读:同一事务中,多次读取同一数据返回的结果有所不同(读取到另一个事务已经提交的更新的数据)。
幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。
正常情况下,数据库提供了四种隔离级别:
READ_UNCOMMITED:安全级别最低,如果设置为该级别,就可能会发生脏读、不可重复读、幻读等。
READ_COMMITED:如果设置该级别,可以避免脏读的发生,但是可能会发生不可重复读和幻读。
REPEATABLE_READ:如果设置该级别,可以避免脏读和不可重复读,但是可能会发生幻读。
SERIALIZABLE:事务是串行的,不会发生并发访问这种情况
Spring提供了DEFAULT,它代表使用数据库默认的隔离级别(例如:Mysql默认采用REPEATABLE_READ隔离级别,Oracle默认采用READ_COMMITTED隔离级别)。
事务隔离级别(四种)
mysql默认采用REPEATABLE_READ隔离级别;
oracle默认采用READ_COMMITTED隔离级别
不考虑隔离性,会引发安全问题:脏读、不可重复读、幻读
脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。
不可重复读:在同一个事务中,多次读取同一数据返回的结果有所不同。
幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的数据。
四种事务隔离级别
事物四种隔离级别
Spring TransactionDefinition是一个接口,定义了一些常量
ISOLATION开头是事物隔离级别
PROPAGATION开头是事物的传播行为
TIMEOUT_DEFAULT是超时信息
以及他们的get方法
事务的隔离级别
spring事务隔离级别
事务隔离级别(四种)
脏读:一个事物读取了另一个事物改写但还未提交的数据,如果这些数据回滚,则读到的数据是无效的
不可重复读:在同一个事物中,多次读取同一数据返回的结果有所不同
幻读:一个书屋读取了几行记录后,另一个事物插入一些记录,幻读就发生了。在后来的查询中,第一个事物就会发现有些原来没有的记录
脏读:一个事物读取了另一个事务改写但未提交的数据,如果这些数据被回滚,则读到的数据是无效的