HSQLDB 错误:意外令牌:FOREIGN

Posted

技术标签:

【中文标题】HSQLDB 错误:意外令牌:FOREIGN【英文标题】:HSQLDB Error: unexpected token: FOREIGN 【发布时间】:2014-12-07 10:25:34 【问题描述】:

我在本地 HSQLDB 2.3.2 数据库中运行以下 SQL:

CREATE TABLE IF NOT EXISTS countries (
    country_id              INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) NOT NULL PRIMARY KEY,
    country_version         INTEGER NOT NULL,
    country_name            NVARCHAR(100) NOT NULL,
    country_label           NVARCHAR(100) NOT NULL,
    country_description     NVARCHAR(500) NOT NULL
    country_code            NVARCHAR(10) NOT NULL,

    CONSTRAINT uc_countries UNIQUE (country_id, country_version, country_label, country_description, country_code)
);

CREATE TABLE IF NOT EXISTS states (
    state_id                INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) NOT NULL PRIMARY KEY,
    state_version           INTEGER NOT NULL
    state_name              NVARCHAR(100) NOT NULL,
    state_label             NVARCHAR(100) NOT NULL,
    state_description       NVARCHAR(500) NOT NULL,
    country_id              INT NOT NULL,

    FOREIGN KEY (country_id) REFERENCES countries(country_id),
    CONSTRAINT uc_states UNIQUE (state_id, state_version, state_label, state_description, country_id)
);

当我运行它时,我得到:

Error: unexpected token: FOREIGN
SQLState:  42581
ErrorCode: -5581

这里发生了什么,我能做些什么来解决它?

【问题讨论】:

为什么没有解释就投反对票?如果这是一个骗局,请告诉我这个问题是一个骗局!否则,这是SSCCE,显示了努力/研究,并包含诊断/排除故障所需的一切。 我没有对你投反对票,但我认为这是个好问题,所以我投了赞成票。 单独执行每条语句是否还会出现此错误?这可能是由于它的遵守方式。 感谢@april4181 (+1) - 这只是我的疏忽(请参阅我在已接受答案下的评论)。感谢您抽出宝贵时间提出这些建议! 【参考方案1】:

INT NOT NULLINTEGER NOT NULL 有区别吗?因为你已经定义了country_id 字段。

另外,如果在顶部插入SET REFERENTIAL_INTEGRITY FALSE;,还会出现这个错误吗?

【讨论】:

Ughhhhh,我不敢相信我已经盯着它看了多久,并且一直在忽略它。 INT 无效,必须是 INTEGER。赏金和接受的答案奖励!谢谢!

以上是关于HSQLDB 错误:意外令牌:FOREIGN的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB 在触发器中声明行

HSQL 触发意外令牌 NEW

HSQL - 意外的令牌:语句中的 PROCEDURE

Junit 测试用例 - HSQLDB count(...) over (partition ... order by ...)

解析错误:意外的令牌,预期的“,”和语法错误:意外的令牌'['[重复]

休眠错误消息:意外令牌:NULLS(脚本文件行中的错误:13 意外令牌:NULLS)