【问题标题】:SQL exception due to foreign key constraint trying to create tables由于试图创建表的外键约束导致的 SQL 异常
【发布时间】:2011-07-20 06:41:53
【问题描述】:

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

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: 被 FOREIGN KEY 约束引用: PUBLIC.INVOICE.SYS_FK_10079 在语句 [ DROP TABLE ORDERS IF 存在]

我不知道如何解决这个问题..我需要 ORDERS 表中的 invoiceId 和 INVOICE 表中的 OrderID 作为外键..这就是我使用 ALTER TABLE 语句的原因..仍然,它似乎是错误的.. (顺便说一句,我正在使用 hsqldb)

我想知道如何正确地做到这一点。欢迎任何帮助..

【问题讨论】:

  • 我建议您将约束放在 Create Table 语句中以获得更好的可读性。
  • 将 FOREIGN KEY(INVOICE_ID) REFERENCES INVOICE(INVOICE_ID) 放入 CREATE_TABLE ORDERS 会导致 INVOICE_ID not found 错误消息
  • 对于一些测试表,这对我来说运行得很好

标签: sql foreign-keys constraints hsqldb sqlexception


【解决方案1】:

先删除订单的外键:

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

然后运行你的命令。

【讨论】:

  • 我试过 [sql] 执行失败:ALTER TABLE ORDERS DROP FOREIGN KEY(INVOICE_ID) REFERENCES INVOICE(INVOICE_ID) BUILD FAILED java.sql.SQLException: 用户缺少权限或找不到对象: FOREIGN
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 2011-09-03
  • 2014-01-06
  • 1970-01-01
  • 2015-02-09
相关资源
最近更新 更多