從我的代碼(Java)我想確保在我的代碼執行後數據庫(DB2)中存在一行。DB2是否有「插入或更新」語句?
我的代碼現在執行select
,如果沒有返回結果,它會執行insert
。我真的不喜歡這個代碼,因爲它在多線程環境中運行時暴露了我的併發問題。
我想要做的就是把這個邏輯放在DB2中而不是在我的Java代碼中。 DB2是否有insert-or-update
語句?或者我可以使用的任何類似的東西?
例如:
insertupdate into mytable values ('myid')
做的另一種方式,它可能將是永遠做插入和捕獲「SQL代碼-803主鍵已經存在」,但我想避免,如果可能的。
每個線程有一個事務不是更好嗎?數據庫管理系統在多線程下運行良好,這就是交易發明的原因。他們會解決併發問題。 – bortzmeyer 2008-12-01 10:58:16
這不會解決併發問題,因爲事務只能通過在已經存在的行上進行阻塞來工作。如果行不存在,事務就不能阻塞它,所以這種操作仍然對併發問題開放 – Richard 2011-11-30 15:57:55