2017-03-03 137 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)