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

Oracle 主鍵建立兩大模式:自增序列與唯一序列完整操作指南

     編輯:Oracle 資料庫基礎

Oracle 主鍵約束特性:單一表僅一個、隱含 NOT NULL、自動建立唯一索引。本文示範自增主鍵與手動指定唯一序列兩種常見模式。

模式一:自增主鍵

-- 建表
CREATE TABLE pk_inc_test (
  id   NUMBER(10) PRIMARY KEY,
  name VARCHAR2(30)
);

-- 建立 Sequence(注意關鍵字 INCREMENT BY)
CREATE SEQUENCE pk_inc_seq
  MINVALUE 1
  NOMAXVALUE
  START WITH 1
  INCREMENT BY 1
  NOCYCLE
  NOCACHE;

-- 建立 Trigger
CREATE OR REPLACE TRIGGER pk_inc_trg
BEFORE INSERT ON pk_inc_test
FOR EACH ROW
BEGIN
  SELECT pk_inc_seq.NEXTVAL INTO :NEW.id FROM dual;
END;
/

-- 測試:指定 id 會被 Trigger 覆蓋
INSERT INTO pk_inc_test (id) VALUES (181);  -- 實際寫入 1
INSERT INTO pk_inc_test (id) VALUES (181);  -- 實際寫入 2
INSERT INTO pk_inc_test (id) VALUES (181);  -- 實際寫入 3

模式二:手動指定唯一序列(業務鍵)

CREATE TABLE pk_manual (
  id   NUMBER(10) PRIMARY KEY,
  name VARCHAR2(30)
);

-- 應用層自行取號:SELECT pk_manual_seq.NEXTVAL FROM dual;
INSERT INTO pk_manual (id, name) VALUES (pk_manual_seq.NEXTVAL, 'Alice');

主鍵 vs Unique 關鍵差異

特性Primary KeyUnique
每表數量1多個
允許 NULL否是(單欄)
自動建索引是是
外鍵參考對象是是

複合主鍵/Unique 索引前綴原則

WHERE pk_col1 = :v1 AND pk_col2 = :v2 可用索引;WHERE pk_col2 = :v2 無法使用(無前導欄)。

外鍵刪除規則

  • ON DELETE CASCADE:刪父記錄自動刪子記錄。
  • ON DELETE SET NULL:子表外鍵設 NULL(需欄位允許 NULL)。
  • 刪父表:DROP TABLE parent CASCADE CONSTRAINTS 移除子表外鍵、保留資料。
自增主鍵適合代理鍵;業務鍵(如身分證號、訂單號)宜採手動指定,保留語義可讀性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved