Java Netbeans在尝试执行CREATETABLESQL命令时发出错误代码-1,SQL状态42Z93

Java Netbeans在尝试执行CREATETABLESQL命令时发出错误代码-1,SQL状态42Z93,java,sql,netbeans,derby,javadb,Java,Sql,Netbeans,Derby,Javadb,这就是我试图执行的: CREATE TABLE "order" ( "o_id" INTEGER not null primary key, "c_id" INTEGER, PRIMARY KEY (o_id), FOREIGN KEY (c_id) REFERENCES customer(c_id) ); 执行上述SQL命令时出现此错误: 错误代码-1,SQL状态42Z93:约束“SQL12032630633321”和 “SQL120326130633320”

这就是我试图执行的:

CREATE TABLE "order" (
    "o_id" INTEGER not null primary key,
    "c_id" INTEGER,
    PRIMARY KEY (o_id),
    FOREIGN KEY (c_id) REFERENCES customer(c_id)
);
执行上述SQL命令时出现此错误:

错误代码-1,SQL状态42Z93:约束“SQL12032630633321”和 “SQL120326130633320”具有相同的列集,但不是 允许

在执行上述SQL命令之前,我执行了以下操作:

CREATE TABLE "customer" (
    "c_id" INTEGER not null primary key,
    "c_first" VARCHAR(30),
    "c_last" VARCHAR(30)
);
编辑(解决方案):

我想我修好了

首先,我必须删除
主键(o_id)
,因为它基本上重复了我在SQL命令
o_id INTEGER not null主键的第2行键入的内容,所以它抱怨我尝试为同一列创建了两次主键

第二,修复后,出现了另一个错误,告诉我找不到
CUSTOMER
表。问题可能是当
CREATE table
尝试执行时,我在表名“customer”周围使用了逗号(“…”)

我删除了“customer”表并重新创建了它,而没有在SQL命令中使用任何引号

之后,我为“订单”执行了“创建表”,它成功了


奇怪的区别是,当我在SQL中使用客户表名称周围的引号时,它的名称在Netbeans的Databases Explorer中显示为小写。但是,当我省略引号时,表名变成了全大写,甚至是它们的列名。

您添加了两次主键约束。您只需要一次,在一个地方或另一个地方,具体取决于DB供应商。

客户成功执行了吗?是的。现在我的数据库中有一个customer表。您可以也应该发布您的解决方案作为此问题的答案(稍后您可以接受)。我删除了主键(o_id)部分,因为我假设这是问题所在,因为我已经在第2行将o_id声明为PRIMARY。但是现在我得到了这个错误:
错误代码-1,SQL状态X0Y46:约束“sql12032633325951”无效:引用的表CUSTOMER不存在。
但是CUSTOMER表确实存在,我在这里看到了所有列。你应该更新你的帖子以反映你当前的代码,从而反映当前的问题。这样你会得到更好的回答。看看关于外键约束的W3SQL课程。