2017-03-03 221 views
0

我试图运行下面的查询,使表:SQL错误:“”附近threatAgent_id“”:语法错误

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

     "asset_id" INTEGER , 
     FOREIGN KEY ("asset_id") REFERENCES asset(id) , 

     "threatAgent_id" INTEGER , 
     FOREIGN KEY ("threatAgent_id") REFERENCES threatAgent(id) , 

     "vulnerability_id" INTEGER , 
     FOREIGN KEY ("vulnerability_id") REFERENCES vulnerability(id) 

) ; 

但抱怨

error: near ""threatAgent_id"": syntax error 

我做了threatAgent使用下面的查询:

CREATE TABLE "threatAgent" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "means" TEXT check(typeof("means") = 'text') , "motivation" VARCHAR, "capabilities" VARCHAR, "opportunities" VARCHAR) 

所以,为什么抱怨?

回答

1

它不喜欢使用约束定义交错列定义。所以当它到达第一个约束时,它认为不会有更多的列。

将所有约束定义移动到底部进行解析。

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

     FOREIGN KEY ("asset_id") REFERENCES asset(id) , 
     FOREIGN KEY ("threatAgent_id") REFERENCES threatAgent(id) , 
     FOREIGN KEY ("vulnerability_id") REFERENCES vulnerability(id) 

) ;