數據庫作為一個系統的核心,數據庫設計的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里面虛擬的表,並不真實存在
