我是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”:语法错误
我觉得我的语法是正确的,但无法弄清楚为什么我会收到此错误。任何帮助将不胜感激,
答案 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)
);
答案 1 :(得分:0)
问题行实际上是你的错误引用上面的那个:
FOREIGN KEY(team_id) REFERENCES nl_central_teams(id),
SQLite中的外键支持有点棘手。由于以下原因之一,它可能无法正常工作:
您使用的是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查询,但不强制执行外键约束。
您的安装支持外键支持,但尚未启用。 (见http://www.sqlite.org/faq.html#q22。)
从版本3.6.19开始,SQLite支持外键约束。但默认情况下禁用外键约束的强制执行(为了向后兼容)。要启用外键约束强制,请运行PRAGMA foreign_keys = ON或使用-DSQLITE_DEFAULT_FOREIGN_KEYS = 1进行编译。