首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite near语法错误

sqlite near语法错误
EN

Stack Overflow用户
提问于 2014-09-05 00:56:34
回答 2查看 19K关注 0票数 3

我是sql新手,正在尝试创建一个具有对另一个表的外键引用的表。我一直收到一个近乎错误的语法错误,并且找不出原因。请参阅下面的sql语句

第一张表

代码语言:javascript
复制
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

   ...> );

第一个表工作正常。

第二个表

代码语言:javascript
复制
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”附近:语法错误

我觉得我的语法是正确的,但是我不知道为什么我会得到这个错误。任何帮助都会很感激,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-05 00:59:34

外键约束应位于CREATE TABLE定义的末尾。

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

代码语言:javascript
复制
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

票数 4
EN

Stack Overflow用户

发布于 2014-09-05 01:11:05

问题行实际上是位于错误引用上方的行:

FOREIGN KEY(team_id) REFERENCES nl_central_teams(id),

SQLite中的外键支持有点棘手。它可能由于以下原因之一而不起作用:

当外键支持是introduced.

  • You的3.6.9或更高版本,但您的特定安装是在没有外键支持的情况下编译的时候,您使用的是3.6.9之前的版本
  1. ,这是可能的。(参见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进行查询,但不会强制执行外键约束。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25671056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档