Isolation Level
来源:互联网 发布:linux sed 最后一行 编辑:程序博客网 时间:2024/06/01 08:03
上次介紹到 Lock 的特性,主要是要了解資料庫對於資料保護的基本方法,在實務上的運用是要利用 Isolation Level 來做資料存取權限的設定。一般而言,Isolation Level 可以分成四個階層,層級高的功能會涵蓋層級低的功能。
層級名稱說明0read uncommitted允許讀取尚在作用中的 transaction 異動過的資料,也就是當資料正在被其他 transaction 異動時,也可以讀取該資料。1read committed只能讀取不在 transaction 中異動的資料,也就是當資料正在被其他 transaction 異動時,就不可以讀取該資料。2repeatable read在同一個 transaction 中,同樣的 SQL 語法都會得到同樣的結果,也就是當資料被讀取後,其他的 transaction ,不可以 update 或 delete 該資料。3serialized read在同一個 transaction 中,同樣的 SQL 語法都會得到同樣的結果,也就是當資料被讀取後,其他的 transaction ,不可以 insert、update 或 delete 該資料。Isolation Level 0 ( read uncommitted )
T1事件說明T2begin transactionT1、T2 兩個 transaction 同時啟動begin transactionUpdate employee Set salary = salary * 1.05T1 正在做調薪的動作 T2 讀取 empid 為 A01 的薪資資料Select salary From employee Where empid = 'A01' T2 處理結束commit transactioncommit/ rollback transactionT1 處理過程正常 ( commit ),處理過程中有問題,回復到未處理的狀態 ( rollback )當 T2 以 read uncommitted 的方式讀取資料時,所取得的薪資資料,會因為 T1 以 rollback 的方式結束,而取得錯誤的資料。
Isolation Level 1 ( read committed )
T3事件說明T4begin transactionT3、T4 兩個 transaction 同時啟動begin transactionUpdate employee Set salary = salary * 1.05T3 正在做調薪的動作 T4 讀取 empid 為 A01 的薪資資料Select salary From employee Where empid = 'A01'commit/ rollback transactionT4 處理過程正常 ( commit ),處理過程中有問題,回復到未處理的狀態 ( rollback ) T4 處理結束commit transaction當 T3 以 read committed 的方式讀取資料時,T4 會等到 T3 執行完成 ( commit/ rollback ),再讀取該筆資料,萬一 T4 等太久就會發生 Time Out 的現象。
Isolation Level 2 ( repeatable read )
T5事件說明T6begin transactionT5、T6 兩個 transaction 同時啟動begin transactionSelect sum ( salary ) From empT5 計算所有的薪資總和 T6 更新 empid 為 A01 的薪資Update emp Set salary = salary * 1.10 Where empid = 'A01' T6 處理結束commit transactionSelect sum ( salary ) From emp commit transactionT5 處理結束這裡要特別注意的是,T5 重複讀取相同的資料,但是在處理的過程中,T6 更新了部分的資料,將導致 T5 無法取得相同的資料。
為避免這個問題, T5 在讀取資料時應該採用 Isolation Level 2 的方式,禁止使用 update、delete 的指令,才可以達到所需要的效果。
Isolation Level 3 ( serialized read )
T7事件說明T8begin transactionT7、T8 兩個 transaction 同時啟動begin transactionSelect sum ( salary ) From empT7 計算所有的薪資總和 T8 新增一筆 emp 資料Insert Into emp ( ... ) Values ( ... ) T8 處理結束commit transactionSelect sum ( salary ) From emp commit transactionT7 處理結束T7 延續 Isolation Level 2 所產生的問題,當 T8 insert 新的資料進來時,將導致 T7 無法取得相同的資料。
為避免這個問題, T7 在讀取資料時應該採用 Isolation Level 3 的方式,除了禁止使用 update、delete 的指令,同時也禁止使用 insert 的指令,才可以達到所需要的效果。
至於要使用哪一種 Isolation Level,必須視實際上的需要做設定,沒有絕對的處理方法。
- Isolation Level
- isolation level
- Isolation Level
- Isolation level
- SET TRANSACTION ISOLATION LEVEL
- innodb_locks_unsafe_for_binlog && transaction isolation level
- Transaction, Lock, Isolation Level
- SET TRANSACTION ISOLATION LEVEL
- ACID ISOLATION LEVEL
- oracle isolation level
- Transaction Isolation Level
- Transaction Isolation Level
- 隔离级别(Isolation Level)
- 数据库的事物处理ISOLATION LEVEL
- [转]SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
- informix 进程隔离级(isolation level)
- SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
- SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
- 8-10月阅读计划
- PHP调用Webservice实例
- 聚合函数的应用
- 基于php的webservice的使用
- 给VS2005的编辑器添加右边界线
- Isolation Level
- JUnit的使用总结
- phpcms学习之install.php之二
- 20个免费的SEO网站分析工具
- 史上最全的vim配置
- quartz cron 表达式详解
- GetDIBits() 获取填充BITMAPINFO结果
- Struts1和Struts2的Action异同
- squid查错,常用语句