Identity
有沒有人使用過從 2^64-1 倒數的數據庫序列?
有沒有人使用從 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 中序列的所有您想知道的(以及您不想知道的),請閱讀文件。