首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2自增主鍵實戰:IDENTITY與SEQUENCE深度對比與最佳實踐

     編輯:DB2 教學

前言

自增主鍵是數據庫設計核心模式。DB2提供兩種機制:IDENTITY列與SEQUENCE對象。本文深度對比兩者差異,提供選型決策樹與實戰代碼。

兩大機制核心差異

維度IDENTITY列SEQUENCE對象
作用域單表單列跨表、跨列、跨Schema共享
綁定關係緊耦合表定義獨立對象,鬆耦合
每表數量最多1個無限制
值生成時機INSERT時自動顯式調用NEXT VALUE
事務獨立性隨事務提交/回滾獨立於事務(可選)
緩存機制不支援緩存支援CACHE/NO CACHE
循環選項不支援CYCLE支援CYCLE/NO CYCLE

IDENTITY列語法與實戰

基本語法

CREATE TABLE strategy (
    strategy_id DECIMAL(17) GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) PRIMARY KEY NOT NULL,
    strategy_name VARCHAR(200),
    area_code DECIMAL(6,0)
);

關鍵選項解析

  • GENERATED ALWAYS:系統強制生成,不可手動插入值
  • GENERATED BY DEFAULT:允許手動指定值(如數據遷移)
  • START WITH:起始值
  • INCREMENT BY:步長(可負數,實現遞減)
  • CACHE n:預分配緩存值(提升高併發性能,故障可能導致間隙)
  • NO CACHE:不緩存(無間隙,性能稍低)

SEQUENCE對象語法與實戰

創建序列

CREATE SEQUENCE orders_seq
    AS INTEGER
    START WITH 1
    INCREMENT BY 1
    CACHE 20
    NO CYCLE;

使用序列值

-- 獲取下一值(插入時使用)
INSERT INTO orders (order_id, ...) VALUES (NEXT VALUE FOR orders_seq, ...);

-- 獲取前一值(當前會話上一次生成的值)
VALUES PREVIOUS VALUE FOR orders_seq;

選型決策樹:何時用哪個?

✅ 選擇IDENTITY列的場景

  • 單表單列自增主鍵
  • 每行必須獨立唯一值
  • 值生成與INSERT緊密綁定
  • 簡單CRUD應用、傳統ERP/CRM主鍵

✅ 選擇SEQUENCE的場景

  • 多表共享同一序列(如訂單號、流水號跨表唯一)
  • 單表多列需自增值
  • 值生成與INSERT解耦(如預先生成ID、分布式ID分配)
  • 需要緩存優化高併發插入性能
  • 需要循環序列(如臨時編號循環使用)
  • 異構遷移(Oracle SEQUENCE無縫對應)

計算列:另一種「自增」形式

基於其他列計算生成值:

CREATE TABLE user (
    name VARCHAR(30),
    n1 INTEGER,
    n2 INTEGER,
    id INTEGER GENERATED ALWAYS AS (n1 + n2)
);

適用於衍生指標、冗余計算列物化場景。

遷移與兼容性提示

  • DB2支援Oracle兼容語法:NEXTVAL/PREVVAL別名
  • 從Oracle遷移時,SEQUENCE是首選對應方案
  • IDENTITY列隱式NOT NULL,不可指定DEFAULT子句

總結

單表簡單主鍵用IDENTITY;跨表共享、高併發、需緩存、遷移Oracle用SEQUENCE。理解兩者本質差異,按業務場景選型,避免過度設計。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved