2013-04-11 69 views
1

這是我第一次使用oracle SQL,並且在創建具有唯一鍵的表時遇到問題。Oracle - 如何創建一個具有自動增量唯一鍵ID的表格

我不明白爲什麼這個自動遞增的ID是不工作:

ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY 

下一個問題我已經是爲什麼我在我的每個語句得到一個錯誤:

ORA-00922: missing or invalid option 

這裏是我的代碼:

-- 
-- Sequence for aout incrment 
-- 
CREATE SEQUENCE IF NOT EXISTS AUTO_INC_SEQ 
START WITH 1 
INCREMENT BY 1; 

-- 
-- Table Person 
-- 
CREATE TABLE IF NOT EXISTS FITNESS_PERSON 
(
ID NUMBER NOT NULL PRIMARY KEY, 
FIRST_NAME VARCHAR NOT NULL, 
LAST_NAME VARCHAR NOT NULL, 
NICK_NAME VARCHAR NOT NULL, 
DATE_BIRTH DATE NOT NULL, 
PASSWORD VARCHAR NOT NULL, 
CONSTRAINT UNIQUE(NICK_NAME) 
); 

-- 
-- Table BMR 
-- 
CREATE TABLE IF NOT EXISTS FITNESS_BMR 
(
ID NUMBER NOT NULL PRIMARY KEY, 
VALUE FLOAT NOT NULL, 
VALUE_DATE DATE NOT NULL 
); 

-- 
-- M:N for BMR and Person 
-- 
CREATE TABLE IF NOT EXISTS FITNESS_BMR_PERSON 
(
BMR_ID NUMBER NOT NULL, 
PERSON_ID NUMBER NOT NULL, 
FOREIGN KEY(BMR_ID) REFERENCES FITNESS_BMR(ID), 
FOREIGN KEY(PERSON_ID) REFERENCES FITNESS_PERSON(ID), 
CONSTRAINT BMR_PER PRIMARY KEY(BMR_ID, PERSON_ID) 
); 

什麼是做到這一點的正確方法(創建一個表並與AUT遞增密鑰是唯一的)。

+0

Oracle不支持'IF NOT EXISTS'用於'CREATE TABLE'或「CREATE SEQUENCE」。它也沒有'AUTO_INCREMENT'列。刪除這些,你會得到更多。至於'IF NOT EXISTS',只需在每個CREATE TABLE之前放一個'DROP TABLE whatever' - 如果該表尚不存在,你將會得到一個錯誤,但它是無害的。 – 2013-04-11 19:16:51

+1

如果該表確實存在,並且其中的數據被刪除,則很難將其描述爲無害。 – 2013-04-11 19:19:36

+0

好的thx。這幫助了很多^^ 我該如何解決我的自動增量問題。因爲我希望我的ID通過插入新數據自動增加。 – user1882812 2013-04-11 19:24:49

回答

3

您可以使用表格,序列來生成唯一的ID值和觸發器。

例如:

表:

CREATE Table FITNESS_BMR 
(
ID NUMBER NOT NULL PRIMARY KEY, 
VALUE FLOAT NOT NULL, 
VALUE_DATE DATE NOT NULL 
); 

序列:create sequence t1_seq start with 1 increment by 1 nomaxvalue;

觸發:

CREATE OR REPLACE TRIGGER test_trigger 
BEFORE INSERT 
ON FITNESS_BMR 
REFERENCING NEW AS NEW 
FOR EACH ROW 
BEGIN 
SELECT t1_seq.nextval INTO :NEW.ID FROM dual; 
END; 
/ 
+0

我在10年內沒有使用Oracle,因此您可能需要微調語法。哦,只是看到了接受。 :) – 2013-04-11 19:36:45

+0

確定還是有問題^^ 我的SQL腳本在觸發器創建後立即停止。 爲什麼?因爲END? 我不得不使用自動遞增的ID來創建更多的表格,而不是我上面列出的。 (總共321個,我必須爲每個表定義一個觸發器,但它在第一次觸發後停止) – user1882812 2013-04-11 20:44:37

+0

和theres再次的東西-.- ORA-00907:缺少右括號 我打開並正確關閉所有內容。 - – user1882812 2013-04-11 20:48:55

相關問題