【面試題】併發操做時數據庫事務怎麼處理的

事務(transaction)是由一些列操做序列構成的執行單元,這些單元要麼都作,要麼不作,是一個不可分割的工做單元。數據庫

事務的四種特性:原子性、一致性、分離性、持久性。併發

原子性:指的是事物中包含的全部操做要麼全作,要麼全不作。spa

一致性:在事物開始之前,數據庫處於一致性的狀態,事物結束後,數據庫也必須處於一致性的狀態。事務

分離性:指併發的事務是相互隔離的。即一個事務內部的操做及正在操做的數據必須封鎖起來,不被其它企圖進行修改的事務看到。io

持久性:持久性意味着當系統或介質發生故障時,確保已提交事務的更新不能丟失。即一旦一個事務提交,DBMS保證它對數據庫中數據的改變應該是永久性的,即對已提交事務的更新能恢復。持久性經過數據庫備份和恢復來保證。class

事務處理有兩種:1.數據庫事務   2.Spring事務(咱們通常都用Spring處理事務)date

數據庫事務級別有3中:分別是幻讀、不可重複讀和髒讀數據

幻讀(讀取時,插入):事務T1進行查詢操做返回了一個結果集,事務T2此時進行了insert操做,剛好知足事務T1的要求,此時T1並查詢一遍,返回的結果集和第一次返回的結果集不一樣。查詢

不可重複讀(讀取時,有更新):事務T1進行查詢操做返回了一個結果集,事務T2此時進行了update操做,事務T1再查詢一遍,兩個返回的結果集不一致。di

髒讀(更新後讀取):事務T1進行了insert/update操做,未提交。事務T2進行查詢返回了一個結果集,此時T1進行了回滾,T2讀到的其實就是無效的髒數據了。

數據庫事務隔離級別有如下四種:

READ UNCOMMITTED 幻想讀、不可重複讀和髒讀都容許。

READ COMMITTED 容許幻想讀、不可重複讀,不容許髒讀

REPEATABLE READ 容許幻想讀,不容許不可重複讀和髒讀

SERIALIZABLE 幻想讀、不可重複讀和髒讀都不容許

OracleOracle不支持髒讀,因此數據庫支持READ COMMITTED 和 SERIALIZABLE這兩種事務隔離級別。

SQL標準所定義的默認事務隔離級別是SERIALIZABLE,可是Oracle 默認使用的是READ COMMITTED,MySql的默承認重複讀取(REPEATABLE READ);

設置隔離級別使用 SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]

相關文章
相關標籤/搜索