Java事务总结(四)

看了下自己的博客,这已经是对事务的第四次做回顾总结了。不是很全面,但也大致覆盖了我们日常中遇到的所有问题。这里是对之前博客的补充,之前文章点击查看

下面简要说一下事务的隔离级别:

  • 未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据)
  • 已提交读(数据库引擎的默认级别)
  • 可重复读
  • 可序列化(隔离事务的最高级别,事务之间完全隔离),可串行化比较严谨,级别高;

各种数据库的事务隔离级别的查看和设置

MySQL

mysql默认的事务处理级别是 ‘REPEATABLE-READ’ ,也就是可重复读

1.查看当前会话隔离级别

select @@tx_isolation;

2.查看系统当前隔离级别

select @@global.tx_isolation;

3.设置当前会话隔离级别

set session transaction isolatin level repeatable read;

4.设置系统当前隔离级别

set global transaction isolation level repeatable read;

//若上述语句无效,请用下一句
set tx_isolation='read-committed';

Oracle

oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。

默认系统事务隔离级别是 READ COMMITTED,也就是读已提交

1.查看系统默认事务隔离级别,也是当前会话隔离级别

–首先创建一个事务

declare
     trans_id Varchar2(100);
  begin
     trans_id := dbms_transaction.local_transaction_id( TRUE );
  end; 

–查看事务隔离级别

SELECT s.sid, s.serial#,    
  CASE BITAND(t.flag, POWER(2, 28))
    WHEN 0 THEN 'READ COMMITTED'
    ELSE 'SERIALIZABLE'
  END AS isolation_level
FROM v$transaction t
JOIN v$session s ON t.addr = s.taddr AND s.sid = sys_context('USERENV', 'SID');

SQL Server

默认系统事务隔离级别是read committed,也就是读已提交

1.查看系统当前隔离级别

DBCC USEROPTIONS 

isolation level 这一项的 Value 既是当前的隔离级别设置值

2.设置系统当前隔离级别

SET TRANSACTION ISOLATION LEVEL Read UnCommitted;

其中Read UnCommitted为需要设置的值

案例分析:

并行update一条数据,会出现dead lock异常,如下图示例
在这里插入图片描述
数据库是innodb引擎,行级锁,当更新的数据被锁定时,就会出现上述异常,MySQL官方给的建议是,点击查看
在这里插入图片描述
意思是:

  1. 当一个索引足够时,不要用索引合并
  2. 尝试避免在更新中使用索引合并来避免引发死锁

猜你喜欢

转载自blog.csdn.net/hacker_Lees/article/details/88419645