H2 和外键

H2 and FOREIGN KEY

我运行遇到一个问题:

我打算在 H2 中创建 2 tables。当我尝试创建第二个 table 时,出现错误:

column C_TASK not found

代码如下:

CREATE TABLE S_TASK (C_TASK INT PRIMARY KEY, N_TASK VARCHAR(255), POINT_COUNT INT);

CREATE TABLE S_ACHIEVEMENT(C_ACHIEVEMENT INT PRIMARY KEY, N_REWARD VARCHAR(255), PICTURE VARCHAR(255), FOREIGN KEY (C_TASK) REFERENCES S_TASK(C_TASK), EXEC_COUNT INT);

没有定义链接字段

您正在为 table S_ACHIEVEMENT 中不存在的列定义关系(外键)。 child table("many" table)上的列和 parent [=93] 上的列之间的外键 link =]("one" table)。您的代码说您希望从 "S_ACHIEVEMENT" 上的字段 "C_TASK" link,但 table.

上没有 "C_TASK" 字段

例子

以拥有 0 张或多张发票 (child table) 的客户 (parent table) 为例,并且每张发票必须仅由一位客户拥有.同样,发票 table 又是行项目 table.

的 parent

您将有 table 和列:

  • 客户_
    • 姓名_
    • 电话_
    • uuid_(主键)
  • 发票_
    • invoice_number_
    • date_of_invoice_
    • uuid_(主键)
    • fk_customer_uuid_(外键)
  • line_item_
    • item_number_
    • product_sold_
    • 成本_
    • uuid_(主键)
    • fk_invoice_uuid_(外键)

在发票上_ table 您将定义:

ALTER TABLE invoice_ ADD FOREIGN KEY ( fk_customer_uuid_ ) REFERENCES customer_( uuid_ ) ;

ALTER TABLE line_item_ ADD FOREIGN KEY ( fk_invoice_uuid_ ) REFERENCES invoice_( uuid_ ) ;

那些标记为“(外键)”的列是您忘记在 child table 上定义的内容。

请参阅此帖子,H2 Alter Table Add Foreign Key,了解另一个示例。