Oracle實現主鍵自增的幾種方式


數據庫作為一個系統的核心,數據庫設計的1NF就是一個表結構必須有唯一約束也就是主鍵,Oracle數據庫本身沒有自增機制,不像MySQL直接使用關鍵字AUTO_INCREMENT自動加一,所以需要我們去自己來實現,下面有幾種實現的方式

一、序列化+觸發器

第一步在表結構完整的情況下創建一個序列

CREATE SEQUENCE SEQ_NAME
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 9999999999999999
    START WITH 1
    CACHE 20

第二部創建觸發器

CREATE OR REPLACE TRIGGER TRIGGER_NEW
BEFORE INSERT ON TABLE_NAME
REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW
ENABLE WHEN (NEW.ID IS NULL)
BEGIN 
    SELECT 
        SEQ_NEW INTO : NEW.ID
    FROM 
         DUAL
END

二、序列+顯示調用

同樣先創建觸發器 

CREATE SEQUENCE SEQ_NAME
    INCREMENT BY 1
    MINVALUE 1
    NOMAXVALUE
    START WITH 1
    NOCYCLE
    NOCACHE

下面顯示調用

INSERT INTO TABLE_NAME VALUES(SEQ_NAME.NEXTVAL)

三、先指定主鍵值,查詢此表最大值一次加一

INSERT INTO TABLE_NAME VALUES(SELECT MAX(ID)+1 ID FROM TABLE_NAME2)

當然第三種方式局限性很大,也可以在代碼中操作不用SQL語句來累加,因為代碼的執行速度要遠比sql語句代碼執行的速度快的多的多

注:

查看當前序列的值

SELECT SEQ_NAME.CURRVAL FROM DUAL

查看當前序列的下一個值

SELECT SEQ_NAME.NEXTVAL FROM DUAL

dual為Oracle里面虛擬的表,並不真實存在

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM