首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改2个外键的表时H2失败(MYSQL语法)

修改2个外键的表时H2失败(MYSQL语法)
EN

Stack Overflow用户
提问于 2020-03-17 09:33:34
回答 1查看 163关注 0票数 0

致力于向使用Flyway的现有项目添加测试。这些表在Versioned flyway文件中,所以它们不能更改,但要尝试找出导致这种基本用例的原因。

代码语言:javascript
复制
CREATE TABLE table1
(
    id LONG PRIMARY KEY AUTO_INCREMENT
);

CREATE TABLE table2
(
    id LONG PRIMARY KEY AUTO_INCREMENT
);

CREATE TABLE table3
(
    id LONG PRIMARY KEY AUTO_INCREMENT,
    t1_id LONG,
    t2_id LONG
);

ALTER TABLE table3
    ADD FOREIGN KEY (t1_id) REFERENCES table1 (id),
    ADD FOREIGN KEY (t2_id) REFERENCES table2 (id);

原因:

代码语言:javascript
复制
SQL State  : 42000
Error Code : 42000
Message    : Syntax error in SQL statement "ALTER TABLE TABLE3
    ADD FOREIGN KEY (T1_ID) REFERENCES TABLE1 (ID),[*]
    ADD FOREIGN KEY (T2_ID) REFERENCES TABLE2 (ID)"; SQL statement:
ALTER TABLE table3
    ADD FOREIGN KEY (t1_id) REFERENCES table1 (id),
    ADD FOREIGN KEY (t2_id) REFERENCES table2 (id) [42000-200]
Location   : db/migration/V1_0__init.sql ...V1_0__init.sql)
Line       : 18
Statement  : ALTER TABLE table3
    ADD FOREIGN KEY (t1_id) REFERENCES table1 (id),
    ADD FOREIGN KEY (t2_id) REFERENCES table2 (id)

在测试中,以下两个场景是成功的。

代码语言:javascript
复制
-- Only 1 foreign key
ALTER TABLE table3
    ADD FOREIGN KEY (t1_id) REFERENCES table1 (id);

-- Inlined foreign keys in table creation
CREATE TABLE table3
(
    id LONG PRIMARY KEY AUTO_INCREMENT,
    t1_id LONG,
    t2_id LONG,

    FOREIGN KEY (t1_id) REFERENCES table1 (id),
    FOREIGN KEY (t2_id) REFERENCES table2 (id)
);

在H2中是否有同时添加多个外键的限制?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-17 10:34:38

这不是H2的限制。在SQL Standard中,不能在ALTER TABLE语句中一次定义多个约束,只能在表的定义中一次定义所有约束。如果尚未在CREATE TABLE命令中定义它们,则需要使用两个单独的ALTER TABLE命令:

代码语言:javascript
复制
ALTER TABLE table3
    ADD FOREIGN KEY (t1_id) REFERENCES table1 (id);
ALTER TABLE table3
    ADD FOREIGN KEY (t2_id) REFERENCES table2 (id)

有些数据库,比如MySQL,有自己的特定于供应商的语法,但是这种语法与其他数据库不兼容,包括H2 (即使在MySQL兼容模式下)。

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

https://stackoverflow.com/questions/60715173

复制
相关文章

相似问题

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