JDBC事务 隔离级别 介绍 与理解

事务隔离级别
事务是用户定义的一个数据库操作系列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
定义事务的语句
Begin transaction;
Commit;
Roll back;

事务的Atomicity Consistent Isolation Durability
Atomicity:原子性 一个操作 要么 不做 要么 全做
Consistent:一致性 使得数据库从一个状态转移到另一个状态,当数据库只包含成功事务的提交时,就说数据库处于一致性状态。转钱的 例子 一个减少,另一个未增加。
Isolation隔离性:一个事务的执行不能被另一个事务打扰。
Durability 持久性:一个事务的提交 对数据库的改变是持久性的。

当多个用户并发的存取数据库时就会产生多个事务同时操作同一数据的情况,这时就需要并发控制。
数据不一致的问题 主要包括一下三点:
1、  丢失修改
比如买票系统T1读取票数16 T2同样读取 16.然后买票1,T1修改后将15 写回,这时T2同样会将15写回,这样买2张票就只减少1.丢失了修改
2、  《1》不可重复读non-repeatable read
T1事务Read(A)=50 Read(B) = 100;
T2 事务Read(B) = 100 B = 2*B Write(B) = 200;
这时候 事务T1再读到的就是修改后的数据
《2》幻读
    当T1按照某一规则读取数据后,由于某些原因,T2导致读取的部分记录删除了,那么你T1再读的时候,就会发现有些记录什神秘的消失。
或者你T1按照某一条件读取到一些记录,T2增加一些记录后 ,你会发现T1按照相同的条件会产生更多的记录。
3、  脏读
T1读数据后修改数据并写入磁盘,T2读取修改过的数据,而T1由于异常rollback,数据恢复到原来的值,这样T2事务就读取到了脏的数据。

并发操作破坏了事务的隔离性Isolation



脏读是读取了未提交的数据,而不可重复读 是读取了已经提交的数据
那么 现在来思考一下怎么避免 这种情况的 发生?
JDBC中设置了5个常量来描述事务隔离界别:
Transaction_Read_uncommitted:可能 发生脏读,不可重复读 和幻读
Transaction_Read_commmitted:不发生脏读,但是可能会发生不可重复读,和幻读
Transaction_Reapeatable_read:不发生 脏 读 和不可重复读 但是 可能发生幻读
Transaction_serializable 禁止脏读 幻读 和不可重复读

还有一个 不支持事务的常量:Transaction_None

发布了101 篇原创文章 · 获赞 11 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章