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您是对的,它应该是一个或另一个。我改变了答案。