Identity

有沒有人使用過從 2^64-1 倒數的數據庫序列?

  • February 22, 2017

有沒有人使用從 2^64-1 倒數而不是從 1 開始倒數的數據庫序列來為行分配 ID?

這樣做的動機是確保任何使用這些 id 的應用程序不會遇到某個位寬 < 64 的溢出錯誤,最明顯的是嘗試使用 32 位 int 來保存 id。如果您從頂部開始,那麼在開發過程中應該會更快出現問題。

從來沒有見過它完成,當然不是因為這個原因。

對於 SQL Server,它可以與 Bigint Identity 列一起使用。但是您必須問是否值得它可能引起的混亂,以及需要記住定義聚集索引降序以防止碎片等。

沒見過做的。

  • 在 MySQL 中,auto_increment 列的增量必須是正數。
  • 在 PostgreSQL 中,沒有無符號整數類型,所以只能使用 63 位。但你可以這樣做:
CREATE SEQUENCE s 
  INCREMENT BY -1
      MINVALUE 1
      MAXVALUE 9223372036854775807 
    START WITH 9223372036854775807
      NO CYCLE;

CREATE TABLE t (
 id BIGINT UNIQUE DEFAULT NEXTVAL('s'),
 data TEXT
);

它有效!如果您手動插入一個id,當序列到達它時,UNIQUE約束將阻止插入,但隨後的呼叫NEXTVAL('s')將返回一個已經超過失敗的值。您(重新)設置序列,例如,

SELECT SETVAL('s', 1000);

這樣您就可以為手動插入保留一個區域。

要了解有關 PostgreSQL 中序列的所有您想知道的(以及您不想知道的),請閱讀文件。

引用自:https://dba.stackexchange.com/questions/165167