2017-03-03 136 views
0

我已經使用成功創建了表:SQL:ALTER TABLE添加不起作用

CREATE TABLE "countermeasure" 
(
    "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    "name" VARCHAR, 
    "description" TEXT check(typeof("description") = 'text'), 
    "probability" DOUBLE, 
    "cost" DOUBLE 
) 

,現在我需要使用外鍵添加到它:

ALTER TABLE "countermeasure" 
(ADD "attack_id" INTEGER, 
FOREIGN KEY ("attack_id") REFERENCES attack(id) 
) 

,但它與抱怨錯誤:

SQLiteManager: Likely SQL syntax error: ALTER TABLE "countermeasure" (
ADD "attack_id" INTEGER ,
FOREIGN KEY ("attack_id") REFERENCES attack(id) ) [ near "(": syntax error ]
Exception Name: NS_ERROR_FAILURE

我相信我已經創建了attack表。

+0

有您嘗試刪除所有雙引號?或者爲外鍵添加約束名稱? – Anand

+0

不,但是他們做了什麼樣的問題? – user5363938

+0

你的SQL不一致,你使用雙引號,除了'''REFERENCES攻擊(id)'''這麼一個建議。 – Anand

回答

0

正如所建議的,圍繞添加的括號不應該在那裏。這通常是用於外鍵

ALTER TABLE table1 ADD COLUMN FOREIGNID INT NOT NULL, ADD FOREIGN KEY  
    (FOREIGNID) REFERENCES table2(ID) 
+0

我在我的phpmyadmin中試過這個,這給了我正確的答案 – pd1

2

規範使用以下語法:

ALTER TABLE table1 
ADD FOREIGN KEY (P_Id) 
REFERENCES table2(P_Id) 
0

變化(,)爲約束

ALTER TABLE countermeasure 
ADD attack_id INTEGER CONSTRAINT fk FOREIGN KEY (attack_id) REFERENCES attack(id) 

或只是

ALTER TABLE countermeasure 
ADD attack_id INTEGER FOREIGN KEY REFERENCES attack(id)