数据库的隔离级别与事务

/

2020-3-8

事务

数据库事务的四个特征

原子性:事务是不可分割的最小工作单元,整个事务的操作要么全部成功,要么全部回滚失败
一致性:事务对同一数据的读取结果是相同的
隔离性:一个事务所做的修改在最终提交以前,对其他事务是不可见的
持久性:事务一旦提交,其所做的修改会永久保存在数据库中

由隔离级别带来的一致性问题

读未提交(RU): 一个事务可以读取另一个事务未提交的修改。
读已提交(RC): 一个事务只能读到其它事务已经提交的修改,没有提交的读不到。
可重复读(RR): 一个事务重复读数据,总是上下一致的,即‘可重复读’,但无法避免幻读的情况。
可串行化(S): 将一个个操作串行化,事务间必须依次进行,不存在互相感染的问题

举例

我们假设有表 item

idnamenum
1苹果100
2香蕉150

有如下两个事务在默认隔离级别下运行情况

transaction_atransaction_bresult_aresult_b
select * from item
where id = 1
\1 |苹果|100\
\select * from item
where id = 1
\1 |苹果|100
update item
set num = num - 10
\\\
\select * from item
where id = 1
\1 |苹果|100
(此处若为RU,
则会读到num = 90)
select * from item
where id = 1
\1 |苹果|90\
commit\\\
\select * from item
where id = 1
\1 |苹果|100
(此处若为RC隔离级别,
则会读到num = 90)
\commit\\

以上为对几个级别的举例说明。

Reproduced please indicate the author and the source, and error a link to this page.
text link: //sealbaby.cn/18