【问题标题】:Foreign Key constraint in DerbyDerby 中的外键约束
【发布时间】:2016-02-26 12:13:43
【问题描述】:

好吧,首先我已经看了几个小时试图使我的外键约束工作的谷歌,但到目前为止没有运气。

我将发布我尝试过的变体(基本上是我在 google 上看到的所有变体)。

这是我的创建语句,效果很好,现在我尝试在用户名列上添加外键。

public final String CREATE_QUESTIONS_TABLE = "CREATE TABLE Questions(QuestionID INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,"
        + "SubmittedTime TIMESTAMP NOT NULL,"
        + "Title VARCHAR(50) NOT NULL,"
        + "Text VARCHAR(300) NOT NULL,"
        + "Username VARCHAR(10),"
        + "Rating INTEGER DEFAULT 0 NOT NULL)";

我尝试在用户名旁边添加这些:

+ "Username VARCHAR(10) CONSTRAINT username_fk FOREIGN KEY (Username) REFERENCES Users(Username),"

+ "Username VARCHAR(10) CONSTRAINT username_fk REFERENCES Users(Username),"

还有一些我现在不记得了(我打开了很多标签)

我知道它不起作用,因为当我添加这些时,当我尝试从中选择时得到以下信息

Schema 'USERNAME' does not exist

这意味着它没有创建表,我试图从一个不存在的表中选择。

请告诉我需要写什么才能将列定义为另一个表的外键。

我正在尝试将表问题的用户名设置为表用户的用户名(主键)的外键。

这是关于 Derby 和 Java 的。

【问题讨论】:

  • 看来您实际上并不确定您运行的是什么 SQL 以及它做了什么。为什么不从一个新的数据库重新开始,并使用像 Derby 的“ij”工具或像 SquirrelSQL 这样的工具来了解 DDL 在创建表时应该如何查找。以下是有关如何指定外键引用的文档:db.apache.org/derby/docs/10.12/ref/rrefsqlj13590.html
  • 我正在为 derby 使用嵌入式驱动程序数据库,我只能将它用于我的项目。
  • 我知道你必须遵守家庭作业的规则,但我很难理解为什么你的老师会认为你学习更多关于 SQL 和 Derby 是一件坏事.或许你可以问你的老师,如果你在db.apache.org/derby/docs/10.12/getstart 上进行 Derby 教程是否可以/跨度>

标签: java sql derby


【解决方案1】:

需要先创建用户表,然后是问题表。

最后添加外键约束:

CREATE TABLE Questions
(
    QuestionID INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    SubmittedTime TIMESTAMP NOT NULL,
    Title VARCHAR(50) NOT NULL,
    Text VARCHAR(300) NOT NULL,
    Username VARCHAR(10),
    Rating INTEGER DEFAULT 0 NOT NULL,
    CONSTRAINT username_fk FOREIGN KEY (Username) REFERENCES Users(Username)
)

【讨论】:

    猜你喜欢
    • 2014-01-16
    • 1970-01-01
    • 2021-07-02
    • 2011-08-30
    • 2013-05-03
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    相关资源
    最近更新 更多