概念:從這一點設置的時間點開始(時間點a)到這個事務結束的過程當中,其餘事務所提交的數據,該事務將看不見!(查詢中不會出現別人在時間點a以後提交的數據)數據庫
應用場合:session
若是你一次執行單條查詢語句,則沒有必要啓用事務支持,數據庫默認支持SQL執行期間的讀一致性;
若是你一次執行多條查詢語句,例如統計查詢,報表查詢,在這種場景下,多條查詢SQL必須保證總體的讀一致性,不然,在前條SQL查詢以後,後條SQL查詢以前,數據被其餘用戶改變,則該次總體的統計查詢將會出現讀數據不一致的狀態,此時,應該啓用事務支持。
【注意是一次執行屢次查詢來統計某些信息,這時爲了保證數據總體的一致性,要用只讀事務】優化
怎樣設置:spa
對於只讀查詢,能夠指定事務類型爲readonly,即只讀事務。
因爲只讀事務不存在數據的修改,所以數據庫將會爲只讀事務提供一些優化手段,例如Oracle對於只讀事務,不啓動回滾段,不記錄回滾log。事務
(1)在JDBC中,指定只讀事務的辦法爲: connection.setReadOnly(true);io
(2)在Hibernate中,指定只讀事務的辦法爲: session.setFlushMode(FlushMode.NEVER);
此時,Hibernate也會爲只讀事務提供Session方面的一些優化手段class
(3)在Spring的Hibernate封裝中,指定只讀事務的辦法爲: bean配置文件中,prop屬性增長「readOnly」
或者用註解方式@Transactional(readOnly=true)
【 if the transaction is marked as read-only, Spring will set the Hibernate Session’s flush mode to FLUSH_NEVER,
and will set the JDBC transaction to read-only】也就是說在Spring中設置只讀事務是利用上面兩種方式配置
在將事務設置成只讀後,至關於將數據庫設置成只讀數據庫,此時若要進行寫的操做,會出現錯誤統計