由于外键约束尝试创建表而导致SQL异常

由于外键约束尝试创建表而导致SQL异常,sql,foreign-keys,constraints,hsqldb,sqlexception,Sql,Foreign Keys,Constraints,Hsqldb,Sqlexception,我尝试使用以下脚本创建一组表: DROP TABLE ORDERS IF EXISTS; DROP TABLE INVOICE IF EXISTS; CREATE TABLE ORDERS( ORDER_ID BIGINT NOT NULL PRIMARY KEY IDENTITY, ... INVOICE_ID BIGINT, ... ); CREATE TABLE INVOICE( INVOICE_ID BIGINT NOT NULL PRI

我尝试使用以下脚本创建一组表:

DROP TABLE ORDERS IF EXISTS;
DROP TABLE INVOICE IF EXISTS;
CREATE TABLE ORDERS(
    ORDER_ID BIGINT NOT NULL PRIMARY KEY IDENTITY,
    ...
    INVOICE_ID BIGINT,
    ...
    );

CREATE TABLE INVOICE(
    INVOICE_ID BIGINT NOT NULL PRIMARY KEY IDENTITY,
    ...
    ORDER_ID BIGINT,
    ...
    FOREIGN KEY(ORDER_ID) REFERENCES ORDERS(ORDER_ID)
);
ALTER TABLE ORDERS ADD FOREIGN KEY(INVOICE_ID) REFERENCES INVOICE(INVOICE_ID);
这会导致sql异常

java.sql.SQLException:被外键约束引用: 语句中的PUBLIC.INVOICE.SYS_FK_10079[如果需要,则删除表订单] 存在]

我不知道如何解决这个问题..我需要ORDERS表中的invoiceId和INVOICE表中的OrderID作为外键..这就是为什么我使用ALTER table语句..尽管如此,它似乎是错误的。。 顺便说一句,我正在使用hsqldb


我想知道如何正确执行此操作。欢迎提供任何帮助。

首先在订单上输入外键:

ALTER TABLE ORDERS DROP FOREIGN KEY(INVOICE_ID) REFERENCES INVOICE(INVOICE_ID);

然后运行您的命令。

我建议将您的构造函数放在Create Table语句中以提高可读性。将外键INVOICE\u ID引用INVOICE INVOICE\u ID放在Create\u Table ORDERS中会导致INVOICE\u ID not found错误消息对于某些测试表,这对我来说运行得非常好,有您的信息。。。您确定FK或PK上没有任何可以将其设置为NULL的约束吗?我尝试过[sql]执行失败:ALTER TABLE ORDERS DROP FOREIGN KEYINVOICE\u ID REFERENCES INVOICE\u ID BUILD Failed java.sql.SQLException:用户缺少权限或找不到对象:FOREIGN