回顾事务的特性

本文深入探讨了事务的四大特性:原子性、一致性、隔离性和持久性,以及它们在数据库管理系统中的作用。同时,文章详细阐述了三类数据读问题(脏读、不可重复读、幻读)和两类数据更新问题,分析了不同问题的成因和解决策略。针对MySQL和Oracle数据库,介绍了事务的隔离级别设置和查看方法。
摘要由CSDN通过智能技术生成

1.事务的四大特性

原子性:事务必须是一个不可分割的整体,要么做完,要么不做。

一致性:事务执行前和执行后来源和去向保持平衡,数据不会被破坏。

隔离性:并发时每个事务是隔离的,相互不影响。

持久性:事务一旦成功提交,就会永久保存到数据库中。

 

原子性是基础,隔离性是手段,持久性是目的,真正的老大就是一致性。

2.三类数据读问题

2-1Dirty Read(脏读)

事务 A 读取了事务 B 未提交的数据,并在这个基础上又做了其他操作。

回顾事务的特性220.png

2-2Unrepeatable Read(不可重复读)

事务 A 读取了事务 已提交的更改数据。

回顾事务的特性273.png

2-3Phantom Read(幻读)

事务 A 读取了事务 B 已提交的新增数据。

回顾事务的特性318.png

2-4不可重复读和幻读的区别


1不可重复读的重点是修改避免不可重复度需要锁行

2幻读的重点在于新增或者删除避免幻读需要锁表

3.两类数据更新问题

3-1第一类丢失更新(撤销覆盖)

A事务撤销时,把已经提交的B事务的更新数据覆盖了。

回顾事务的特性443.png

3-2第二类丢失更新(提交覆盖)

B事务覆盖A事务已经提交的数据,造成A事务所做操作丢失

回顾事务的特性491.png

4.隔离的级别

回顾事务的特性501.png

4-1 MySQL

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

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

select @@tx_isolation;

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

select @@global.tx_isolation;

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

set session transaction isolatin level repeatable read;

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

set global transaction isolation level repeatable read;

4-2 Oracle

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

 

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

4-2-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');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值