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

DB2 自增主鍵兩大方案:IDENTITY 列 vs SEQUENCE 對象深度對比

     編輯:DB2 教學

方案一: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 BY DEFAULT 允許顯式插值。

特點

  • 綁定單表單列,不可跨表共享
  • 每行自動生成唯一值,天然適合主鍵
  • 插入時自動賦值,與 INSERT 語句緊密耦合
  • 隱含 NOT NULL,不可指定 DEFAULT
  • 每表最多一個 IDENTITY 列,需精確數值類型

方案二:SEQUENCE 對象(獨立數據庫對象)

創建與使用

CREATE SEQUENCE order_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO CYCLE CACHE 24;

-- 獲取下一值
INSERT INTO orders (id, ...) VALUES (NEXT VALUE FOR order_seq, ...);
-- 或查詢
VALUES NEXT VALUE FOR order_seq;

-- 獲取當前值(上一條語句生成的值)
VALUES PREVIOUS VALUE FOR order_seq;

特點

  • 獨立於表,可跨多表、多列共享同一序列
  • 生成邏輯與表操作解耦,可在應用層預取值
  • 支持 CACHE 提升高併發性能
  • 提供 NEXT VALUE / PREVIOUS VALUE 表達式靈活調用

核心差異對比表

維度IDENTITY 列SEQUENCE 對象
作用範圍單表單列全數據庫多表多列
共享能力不可共享命名引用,天然共享
生成時機INSERT 時自動顯式調用 NEXT VALUE
主鍵生成極其便捷需應用協調
緩存機制內部隱式可配置 CACHE 參數
遷移兼容性標準 SQL標準 SQL,Oracle/PostgreSQL 兼容佳

選型指南

選擇 IDENTITY 當:

  • 表僅需一個自動生成列
  • 每行需獨立值,作為主鍵
  • 希望插入操作自動賦值,無需應用干預

選擇 SEQUENCE 當:

  • 多表需共享同一編號空間(如訂單號、流水號)
  • 單表多列需自動生成值
  • 生成邏輯需與表操作解耦(如預分配、分庫分表)
  • 跨異構數據庫遷移需兼容標準序列語法

進階:計算列

DB2 也支持基於其他列計算的生成列:

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

此處 id 非自增,而是派生值。

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