首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

主流資料庫自增欄位(Identity/Sequence/Auto_Increment)建立語法完整對照表

     編輯:Oracle 資料庫相關知識

不同資料庫實現自增主鍵的語法差異極大。本文整理 DB2、Oracle、MySQL、PostgreSQL、SQL Server、Sybase 六大主流資料庫的標準建表語法,可直接複製套用。

語法對照表

資料庫建表語法備註
DB2
CREATE TABLE T1 (
  id INTEGER NOT NULL
    GENERATED ALWAYS AS IDENTITY
    (START WITH 1 INCREMENT BY 1
     MINVALUE 1 NO MAXVALUE NO CYCLE NO CACHE ORDER),
  ...
);
Identity 列屬性豐富,支援 CYCLE、CACHE、ORDER
Oracle (12c 前)
CREATE TABLE T1 (
  id NUMBER(10,0) NOT NULL,
  ...
);
CREATE SEQUENCE T1_ID_SEQ INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE CACHE 100 ORDER;
CREATE OR REPLACE TRIGGER INSERT_T1_ID
BEFORE INSERT ON T1
REFERENCING NEW AS new OLD AS old
FOR EACH ROW
BEGIN
  SELECT T1_ID_SEQ.NEXTVAL INTO :new.id FROM DUAL;
END;
需 Sequence + Trigger 兩物件;12c+ 可用 GENERATED AS IDENTITY
Oracle 12c+
CREATE TABLE T1 (
  id NUMBER(10) GENERATED ALWAYS AS IDENTITY,
  ...
);
原生 Identity,語法簡潔
MySQL / MariaDB
CREATE TABLE T1 (
  id INT NOT NULL AUTO_INCREMENT,
  ...
  PRIMARY KEY (id)
);
AUTO_INCREMENT 僅限單欄、通常搭配 PK
PostgreSQL
CREATE TABLE T1 (
  id SERIAL NOT NULL,
  ...
);
-- 或 10+ 標準語法
CREATE TABLE T1 (
  id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  ...
);
SERIAL 內建 Sequence;10+ 支援標準 IDENTITY
SQL Server
CREATE TABLE T1 (
  id INT NOT NULL IDENTITY(1,1),
  ...
  PRIMARY KEY (id)
);
IDENTITY(seed, increment)
Sybase ASE / SQL Anywhere
CREATE TABLE T1 (
  id INT NOT NULL IDENTITY,
  ...
  PRIMARY KEY (id)
);
語法同 SQL Server

關鍵差異總結

  • 物件分離度:Oracle 12c 前 Sequence/Trigger 獨立物件,其他內建於欄位定義。
  • 取值方式:Oracle 需 SEQ.NEXTVAL,SQL Server/PostgreSQL/MySQL 隱性取值。
  • 回傳新值:Oracle RETURNING id INTO :v,SQL Server SCOPE_IDENTITY(),MySQL LAST_INSERT_ID(),PostgreSQL RETURNING id。
  • 快取/效能:Sequence 可設 CACHE 減少鎖競爭;Identity 通常內建快取。

遷移建議

  1. Oracle 12c+ 專案直接用 IDENTITY,簡化維護。
  2. 2. 異構遷移時,將 Sequence/Trigger 改寫為目標資料庫原生語法,避免觸發器效能損耗。 3. 批次匯入需指定 ID 時:Oracle OVERRIDING SYSTEM VALUE,SQL Server SET IDENTITY_INSERT ON,MySQL 直接 INSERT 指定值。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved