Java H2数据库:从外键约束引用根架构中的表

Java H2数据库:从外键约束引用根架构中的表,java,sql,database,h2,Java,Sql,Database,H2,给定根架构中的表: CREATE TABLE user ( username VARCHAR(50), password VARCHAR(50)); 以及quickschema中的一个表: CREATE TABLE Quiz.Results ( username VARCHAR(50), points INT, FOREIGN KEY (username) REFERENCES user(username)); 我无法实际创建外键,因为数据库声称表u

给定根架构中的表:

CREATE TABLE user (
    username VARCHAR(50),
    password VARCHAR(50));
以及
quick
schema中的一个表:

CREATE TABLE Quiz.Results (
    username VARCHAR(50),
    points INT, 
    FOREIGN KEY (username) REFERENCES user(username));
我无法实际创建外键,因为数据库声称表
user
实际上不存在。我也不能随后添加外键:

ALTER TABLE QUIZ.RESULTS
    ADD FOREIGN KEY (username) REFERENCES user (username) 
当然,这两个表都存储在同一个数据库中

因为这只是一个家庭作业,我非常乐意跳过添加外键。但我很好奇这是否真的是H2中的一个限制,一个bug,或者它是否按预期工作


我是否可以在
测验
架构之外引用表
user

如果引用不同架构中的表,则需要显式设置架构名称。H2的默认架构名称为
public
。例如:

CREATE TABLE user (
    username VARCHAR(50),
    password VARCHAR(50));
create schema quiz;
CREATE TABLE Quiz.Results (
    username VARCHAR(50),
    points INT, 
    FOREIGN KEY (username) 
    REFERENCES public.user(username));
要稍后创建外键约束,请使用:

ALTER TABLE QUIZ.RESULTS
    ADD FOREIGN KEY (username) 
    REFERENCES public.user(username) ;

是的,很有可能。您需要为这两个表使用相应的架构名称

假设您的default schema名称是
DefaultSchema
,那么您的查询将是

ALTER TABLE QUIZ.RESULTS
ADD FOREIGN KEY (username) REFERENCES DefaultSchema.user (username) 

知道默认模式(我称之为“根模式”)名称会有所帮助。谢谢我可以问一下为什么要添加两次
外键(用户名)
?似乎您在
测验.结果的表定义中添加了一次,然后在
ALTER table
语句中添加了第二次。@CraigOtis您是对的,它应该是一个或另一个。我改变了答案。