2012-02-10 62 views
1

如果你有一個數據庫事務應該是隻讀的,你提交還是回滾?有沒有任何理由去做這個或那個?其中一種方法是否可以提高數據庫性能?在只讀數據庫事務之後,提交還是回滾會更好?

+0

可能重複[我應該提交或回滾讀事務?](http://stackoverflow.com/questions/309834/should-i-commit-or-rollback-a-read-transaction) – svick 2012-02-12 13:51:00

+0

[我應該提交還是回滾讀取事務?](https://stackoverflow.com/questions/309834/should-i-commit-or-rollback-a-read-transaction) – Wolf 2018-01-11 11:53:39

回答

3

某些RDMS(至少Oracle)具有READ ONLY隔​​離級別。否則,我更喜歡ROLLBACK,因爲它不會在事務日誌中創建條目(從性能的角度來看性能稍微好一點)。

更新 一些解釋。
大多數RDMS記錄所有已提交的事務和與事務相關的更改。即使沒有更改,服務器也會記錄一個事務。我沒有看到通過存儲無用數據來浪費服務器資源的任何問題。

1

我Downpour046 同意我做只讀操作如下。像魅力一樣工作,沒有問題。

Session session; 
    synchronized (this) { 
     session = currentSession(); 
     Query rowResult = session.createSQLQuery(rowQuery).addEntity(table.getClass()); 
     tableRow = rowResult.list().toArray(); 
    } 
public Session currentSession() { 
    Session s = (Session) session.get(); 
    // Open a new Session, if this thread has none yet 
    if (s == null || !s.isOpen()) { 
     s = sessionFactory.openSession(); 
     // Store it in the ThreadLocal variable 
     session.set(s); 
    } 
    return s; 
} 
相關問題