You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建带外键的H2数据库报错:无法找到Turmas表

问题原因与解决方案

问题根源

你遇到的找不到Turmas表的问题,核心是H2数据库对标识符大小写的处理规则导致的匹配失败:

  • 创建Turmas表时,表名没有用双引号包裹,H2默认会将无引号的标识符转为大写存储,实际数据库里的表名是TURMAS。
  • 但在创建Provas表的外键约束时,你用了REFERENCES "Turmas",带双引号的标识符是严格区分大小写的,H2会去查找名为Turmas(首字母大写、其余小写)的表,自然找不到实际存在的TURMAS表。

解决方案

有两种方式可以解决这个问题,选一种即可:

方案1:统一使用无引号标识符(推荐)

去掉所有标识符的双引号,H2会自动处理大小写,确保外键引用能匹配上:

create table Turmas (
id_turmas identity PRIMARY KEY,
nome varchar(50),
periodo VARCHAR(10) 
);

CREATE TABLE Provas (
    id_provas SERIAL PRIMARY KEY,
    nome VARCHAR(15) NULL,
    data VARCHAR(45) NULL,
    Turmas_id_turmas INT,

    CONSTRAINT fk_Provas_Turmas1 
    FOREIGN KEY (Turmas_id_turmas) 
    REFERENCES Turmas (id_turmas)
);

方案2:统一使用带双引号的标识符

如果必须保留双引号,要保证创建表和外键引用时的表名、字段名大小写完全一致:

create table "Turmas" (
"id_turmas" identity PRIMARY KEY,
"nome" varchar(50),
"periodo" VARCHAR(10) 
);

CREATE TABLE "Provas" (
    "id_provas" SERIAL PRIMARY KEY,
    "nome" VARCHAR(15) NULL,
    "data" VARCHAR(45) NULL,
    "Turmas_id_turmas" INT,

    CONSTRAINT "fk_Provas_Turmas1" 
    FOREIGN KEY ("Turmas_id_turmas") 
    REFERENCES "Turmas" ("id_turmas")
);

内容的提问来源于stack exchange,提问作者Nicholas Uchoa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:47:38