sqlite接近语法错误

时间:2014-09-04 16:56:34

标签: sql sqlite

我是sql的新手,并尝试创建一个具有对另一个表的外键引用的表。我不断得到一个接近语法错误,无法弄清楚原因。请参阅下面的sql语句

第一张表

sqlite> CREATE TABLE nl_central_teams ( 

   ...>  id INTEGER PRIMARY KEY AUTOINCREMENT,

   ...>  team_name VARCHAR(64) NOT NULL,

   ...>  city VARCHAR(64) NOT NULL,

   ...>  main_color VARCAR(64) NOT NULL,

   ...>  created_at DATETIME NOT NULL,

   ...> updated_at DATETIME NOT NULL

   ...> );

第一张表工作正常。

第二张表

sqlite> CREATE TABLE managers(

   ...> id INTEGER PRIMARY KEY AUTOINCREMENT,

   ...> first_name VARCHAR(64) NOT NULL,

   ...> last_name VARCHAR(64) NOT NULL,

   ...> team_id INTEGER,

   ...> FOREIGN KEY(team_id) REFERENCES nl_central_teams(id),

   ...> created_at DATETIME NOT NULL,

   ...> updated_at DATETIME NOT NULL

   ...> );

错误:靠近“created_at”:语法错误

我觉得我的语法是正确的,但无法弄清楚为什么我会收到此错误。任何帮助将不胜感激,

2 个答案:

答案 0 :(得分:2)

外键约束应该在CREATE TABLE定义的末尾。

您的经理CREATE TABLE语句应如下所示:

CREATE TABLE managers(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    first_name VARCHAR(64) NOT NULL,
    last_name VARCHAR(64) NOT NULL,
    team_id INTEGER,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NOT NULL,
    FOREIGN KEY(team_id) REFERENCES nl_central_teams(id)
);

见这里:http://sqlfiddle.com/#!7/f3f38/1/0

答案 1 :(得分:0)

问题行实际上是你的错误引用上面的那个:

FOREIGN KEY(team_id) REFERENCES nl_central_teams(id),

SQLite中的外键支持有点棘手。由于以下原因之一,它可能无法正常工作:

  1. 当引入外键支持时,您使用的是3.6.9之前的版本。
  2. 您使用的是3.6.9或更高版本,但您的特定安装是在没有外键支持的情况下编译的,这是可能的。 (见http://www.sqlite.org/foreignkeys.html#fk_enable

      

    为了在SQLite中使用外键约束,必须在未定义SQLITE_OMIT_FOREIGN_KEY或SQLITE_OMIT_TRIGGER的情况下编译库。如果定义了SQLITE_OMIT_TRIGGER但SQLITE_OMIT_FOREIGN_KEY未定义,则SQLite的行为与版本3.6.19之前的行为相同 - 解析外键定义并使用PRAGMA foreign_key_list查询,但不强制执行外键约束。

  3. 您的安装支持外键支持,但尚未启用。 (见http://www.sqlite.org/faq.html#q22。)

      

    从版本3.6.19开始,SQLite支持外键约束。但默认情况下禁用外键约束的强制执行(为了向后兼容)。要启用外键约束强制,请运行PRAGMA foreign_keys = ON或使用-DSQLITE_DEFAULT_FOREIGN_KEYS = 1进行编译。