讓我先舉例。這是一個日誌表。如何防止在Java數據庫中使用重複插入?
用戶A訂閱服務A = OK
用戶A退訂服務A = OK
用戶A訂閱服務一遍= OK
用戶A訂閱服務一遍= 不正常,因爲你無法同時訂閱相同的服務。
有時客戶端發瘋,同時發送5個訂閱請求(後面有4個tomcat服務器),如果我在這種情況下什麼都不做,那麼會插入5個相同的記錄。
正如你所看到的,我不能在這裏使用唯一的約束。 我想也許我可以在Oracle中使用一些單線程塊,但不知道.. 我嘗試過「合併」,但我想它是用於特定記錄而不是最後一條記錄。
開始單線程
- 選擇最後一條記錄
- 如果最後一個記錄是一樣的,那麼請不要插入。
- 如果最後一條記錄是不一樣的話插入。 end single thread
是否可能以及如何實現?
爲什麼你不能使用唯一約束? –
@EvgeniyDorofeev主要是因爲唯一約束將仍然允許「服務A」重複訂閱。 – Baby
@EvgeniyDorofeev:因爲用戶以後可以訂閱和取消訂閱,甚至在一天內再次訂閱。 – Aska