我讀過本教程:http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html但我想我仍然錯過了一些東西。JDBC Transaction如何鎖定TRANSACTION_READ_COMMITTED隔離級別的表?
讓我們舉一個例子:
- 線程T1都有各自的連接
- 線程T2都有各自的連接
因此,這些線程執行事務上(的setAutoCommit(假)兩個不同的連接)。本次交易執行,對單個數據庫表,以下查詢:
- 選擇一行讀取一個漸進的數量(PN)
- 插入一行逐步號碼設置爲:PN ++(我所
閱讀+1)
在此表中,進度號必須唯一(它是主鍵)。
執行JDBC事務(具有TRANSACTION_READ_COMMITTED隔離級別)避免了T1和T2讀取相同PN值的問題,並且都嘗試在表中插入相同的PN ++?表被鎖定,直到Insert被執行並且commit()被調用?
的問題是,在我的情況下,主鍵也形成由其他兩個字段(年和月),而不是隻用逐行掃描數量,這必須是唯一的,那麼,在一個月的一年,並從零開始另一個月 – 2012-07-19 11:38:33
那麼恐怕在讀取,增量,更新期間鎖定行可能是唯一的方法。 – 2012-07-19 11:41:53