1.事务的四大特性
原子性:事务必须是一个不可分割的整体,要么做完,要么不做。
一致性:事务执行前和执行后来源和去向保持平衡,数据不会被破坏。
隔离性:并发时每个事务是隔离的,相互不影响。
持久性:事务一旦成功提交,就会永久保存到数据库中。
原子性是基础,隔离性是手段,持久性是目的,真正的老大就是一致性。
2. 三类数据读问题
2-1 Dirty Read(脏读) :
事务 A 读取了事务 B 未提交的数据,并在这个基础上又做了其他操作。

2-2 Unrepeatable Read(不可重复读)
事务 A 读取了事务 B 已提交的更改数据。

2-3 Phantom Read(幻读)
事务 A 读取了事务 B 已提交的新增数据。

2-4不可重复读和幻读的区别
(1)
不可重复读的重点是
修改
,
避免不可重复度需要锁行
(2) 幻读的重点在于 新增或者删除 , 避免幻读需要锁表
3. 两类数据更新问题
3-1 第一类丢失更新 (撤销覆盖)
A事务撤销时,把已经提交的B事务的更新数据覆盖了。

3-2 第二类丢失更新 (提交覆盖)
B事务覆盖A事务已经提交的数据,造成A事务所做操作丢失 。

4.隔离的级别

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');
814

被折叠的 条评论
为什么被折叠?



