我正在使用 Java Spring 和 Oracle DB 創建一個應用程式。
在應用程式中,我想生成一個唯一且有序且沒有間隙的主鍵值:1,2,3,4,5而不是1,2,5,7,8,9.
我曾一度用于max(id) 1獲取 id 的最大值和下一個/當前事務的 id。但是我知道在多個用戶或多個會話并發的情況下它并不完美。
我試過使用序列,但即使使用ORDER標簽,它仍然可能與交易失敗的可能性產生差距。
REATE SEQUENCE num_seq
START WITH 1
INCREMENT BY 1
ORDER NOCACHE NOCYCLE;
我需要有無間隙值作為要求,但是我不確定在多個用戶/多個會話的情況下如何實作。
uj5u.com熱心網友回復:
不要這樣做。
主鍵的目標不是在 UI 上顯示或暴露給外部世界,而只是提供行的唯一識別符號。
簡單來說,主鍵不需要性感或好看。這是一個內部識別符號。
如果您正在考慮使用serial identifier的想法,那意味著您可能希望將其顯示在某處,或者您希望將其暴露給外部世界。如果是這種情況,那么創建一個輔助列(也是唯一的)來服務于這個“公共關系”目標。它可以在不影響資料庫完整性的情況下自動生成或更新。
它也可以由以延遲方式(例如每 10 分鐘)運行的輔助行程生成,該行程查找所有“未分配”的新行,并為它們提供新編號。這具有不易受并發影響的優點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/376008.html
