CREATE TABLE article (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255)
);
INSERT INTO article (title) VALUES ('a'); -- id=1
INSERT INTO article (title) VALUES ('b'); -- id=2
INSERT INTO article (title) VALUES ('c'); -- id=3
-- 也可明確指定 NULL
INSERT INTO article VALUES (NULL, 'd'); -- id=4
特性:
CREATE SEQUENCE seq_test_ids
MINVALUE 1
MAXVALUE 99999999
START WITH 1
INCREMENT BY 1
NOCACHE
ORDER;
CREATE OR REPLACE TRIGGER tri_test_id
BEFORE INSERT ON test_table
FOR EACH ROW
DECLARE
nextid NUMBER;
BEGIN
IF :NEW.id IS NULL OR :NEW.id = 0 THEN
SELECT seq_test_ids.NEXTVAL INTO nextid FROM dual;
:NEW.id := nextid;
END IF;
END tri_test_id;
/
-- 注意:Oracle 需斜線 / 結束 PL/SQL 區塊
INSERT INTO test_table (col1) VALUES ('x'); -- id 自動填 1
INSERT INTO test_table (col1) VALUES ('y'); -- id 自動填 2
| 特性 | MySQL AUTO_INCREMENT | Oracle Sequence+Trigger |
|---|---|---|
| 語法複雜度 | 極簡 (1 行) | 需 2 物件 + PL/SQL |
| 效能 | 內核級優化 | Trigger 開銷略高 |
| 間隙處理 | Rollback/Delete 產生間隙 | NOCACHE 可減少間隙 |
| 跨表共享序列 | 不支援 | Sequence 可多表共用 |
| 重設起始值 | ALTER TABLE ... AUTO_INCREMENT=n | DROP/CREATE Sequence |
| 取得最新 ID | LAST_INSERT_ID() | seq.CURRVAL / RETURNING INTO |
CREATE TABLE article (
id NUMBER GENERATED ALWAYS AS IDENTITY,
title VARCHAR2(255)
);
-- 相當於內建 Sequence + Trigger,語法簡化