多數(shù)據(jù)源事務不生效 使用數(shù)據(jù)庫連接池,怎么解決多個用戶并發(fā)的向數(shù)據(jù)庫中插入數(shù)據(jù)?
使用數(shù)據(jù)庫連接池,怎么解決多個用戶并發(fā)的向數(shù)據(jù)庫中插入數(shù)據(jù)?SQL多用戶訪問數(shù)據(jù)庫實際上是事務并發(fā),這將導致以下問題:1。臟讀:一個事務讀取另一個事務尚未提交的數(shù)據(jù)。事務1:更新數(shù)據(jù)事務2:讀取事務1
使用數(shù)據(jù)庫連接池,怎么解決多個用戶并發(fā)的向數(shù)據(jù)庫中插入數(shù)據(jù)?
SQL多用戶訪問數(shù)據(jù)庫實際上是事務并發(fā),這將導致以下問題:
1。臟讀:一個事務讀取另一個事務尚未提交的數(shù)據(jù)。事務1:更新數(shù)據(jù)事務2:讀取事務1的更新記錄。事務1:調(diào)用commit提交。此時,事務2讀取的數(shù)據(jù)是存儲在數(shù)據(jù)庫內(nèi)存中的數(shù)據(jù),稱為臟讀。讀取的數(shù)據(jù)是臟數(shù)據(jù)。臟讀是指當一個事務正在訪問數(shù)據(jù)并修改數(shù)據(jù),但修改尚未提交到數(shù)據(jù)庫時,另一個事務也會訪問該數(shù)據(jù)并使用該數(shù)據(jù)。因為此數(shù)據(jù)是未提交的數(shù)據(jù),所以另一個事務讀取的數(shù)據(jù)是臟數(shù)據(jù),并且基于臟數(shù)據(jù)的操作可能不正確。
2. 不可重復讀取:在同一事務中,同一數(shù)據(jù)讀取兩次,內(nèi)容不同。事務1:查詢記錄。事務2:更新事務1查詢的記錄。事務2:調(diào)用commit來提交。事務1:再次查詢最后一條記錄。此時,事務1查詢相同的數(shù)據(jù)兩次,并且內(nèi)容不同,這稱為不可重復讀取。
3. 虛讀:在同一個事務中,如果對同一個操作讀兩次,則記錄數(shù)會有所不同。事務1:查詢表中的所有記錄。事務2:插入一條記錄。事務2:調(diào)用commit來提交。事務1:再次查詢表中的所有記錄。此時,事務1兩次查詢不同的記錄,這稱為非真實讀取