我是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”附近:语法错误
我觉得我的语法是正确的,但是我不知道为什么我会得到这个错误。任何帮助都会很感激,
发布于 2014-09-05 00:59:34
外键约束应位于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
发布于 2014-09-05 01:11:05
问题行实际上是位于错误引用上方的行:
FOREIGN KEY(team_id) REFERENCES nl_central_teams(id),
SQLite中的外键支持有点棘手。它可能由于以下原因之一而不起作用:
当外键支持是introduced.
为了在SQLite中使用外键约束,必须在编译库时既不定义SQLITE_OMIT_FOREIGN_KEY也不定义SQLITE_OMIT_TRIGGER。如果定义了SQLITE_OMIT_TRIGGER但未定义SQLITE_OMIT_FOREIGN_KEY,则SQLite的行为与3.6.19之前的版本相同-外键定义将被解析,并可使用PRAGMA foreign_key_list进行查询,但不会强制执行外键约束。
从版本3.6.19开始,SQLite支持外键约束。但是外键约束的强制在默认情况下是关闭的(为了向后兼容)。要启用外键约束强制,请使用-DSQLITE_DEFAULT_FOREIGN_KEYS=1.运行PRAGMA foreign_keys=ON或compile
https://stackoverflow.com/questions/25671056
复制相似问题