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 允許顯式插值。
NOT NULL,不可指定 DEFAULTCREATE 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 兼容佳 |
DB2 也支持基於其他列計算的生成列:
CREATE TABLE user (
name VARCHAR(30),
n1 INT, n2 INT,
id INT GENERATED ALWAYS AS (n1 + n2)
);
此處 id 非自增,而是派生值。