簡體   English   中英

mysql唯一索引用作java中的異常處理方法

[英]mysql unique index used as exception handling method in java

我想知道基於java中sql的唯一索引捕獲異常是否是一個好主意。

我想捕獲一個異常,例如“ 1-0重復項”,然后處理異常,否則在數據庫表中正確插入?

我說你不這樣做,有兩個原因:

  • 錯誤消息有點不清楚: 錯誤1062(23000):密鑰1的條目“ xxx”重復 您是否總是100%確定哪個鍵是1?
  • 它將您鎖定到特定的數據庫供應商

我發現交易更簡單:

  • 檢查行的存在;
  • 如果該行已經存在,則引發異常;
  • 插入新行。

性能問題

我說測量兩次,切一次 剖析您特定用例的用法。 我要說的是,除了大量的數據庫使用情況之外,性能將不是問題。

原因是,一旦您在該特定行上執行了SELECT ,它的數據將被放置在數據庫緩存中,並立即用於對INSERT語句的索引進行插入檢查。 同樣要記住,此訪問由索引支持,因此得出結論,性能將不是問題。

但是,像往常一樣,要進行測量。

我不明白為什么不這樣。 它可能比在插入之前運行查詢更有效。 但是,捕獲異常的錯誤代碼可能比識別錯誤消息要好。

您可以使用REPLACE命令。 它根據記錄的存在來插入/更新。 而且它也是原子的,而查詢然后不是插入/更新。 如果檢測到密鑰沖突,這取決於您要做什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM