【问题标题】:FOREIGN KEY ON DELETE RESTRICT Error - OracleFOREIGN KEY ON DELETE RESTRICT 错误 - Oracle
【发布时间】:2015-08-12 07:01:46
【问题描述】:

最近我一直在尝试在表中添加以下外键,使用 Oracle 中的 RESTRICT 子句,使用以下命令:

ALTER TABLE 
Employee_SalHead 
ADD CONSTRAINT PAYROLL_SHEAD_FKEY FOREIGN KEY
(
  SalHead_ID 
)
REFERENCES SalHead
(
  SalHead_ID
)
ON DELETE RESTRICT ENABLE;

这给了我以下错误:

从第 11 行开始的错误命令 - ALTER TABLE Employee_SalHead ADD 约束 PAYROLL_SHEAD_FKEY 外键 ( SalHead_ID ) REFERENCES SalHead ( SalHead_ID ) ON DELETE RESTRICT ENABLE 错误报告 - SQL 错误:ORA-00905:缺少关键字 00905. 00000 - “缺少关键字” *原因:
*行动:

此外,如果我通过 Oracle SQL 开发人员尝试相同的操作,我只会得到设置 Null、Cascade 和 No Action Only 选项。

【问题讨论】:

  • 试过了,还是不行,同样的错误!!!
  • 您使用 mysql 或 oracle? & 哪个版本?
  • oracle 11g和我上面提到的工具是Oracle SQL Developer 4.0.3.16

标签: oracle foreign-keys


【解决方案1】:

Oracle 仅支持ON DELETE SET NULLON DELETE CASCADE。您只需执行以下查询即可满足您的要求。不用提ON DELETE RESTRICT

ALTER TABLE Employee_SalHead 
      ADD CONSTRAINT PAYROLL_SHEAD_FKEY FOREIGN KEY(SalHead_ID)
      REFERENCES SalHead(SalHead_ID);

ON DELETE NO ACTION 是默认设置。 来自Documentation

无操作(默认)选项指定如果结果数据违反参照完整性约束,则无法更新或删除引用的键值。例如,如果一个主键值被外键中的值引用,那么由于依赖数据,被引用的主键值不能被删除。

【讨论】:

  • 这个答案没有解决发布的问题,因为约束实际上并没有做 Adempiere_HotCake 试图做的事情。如果 Employee_SalHead 中的一行通过外键引用该行,则 DELETE RESTRICT 将阻止删除 SalHead 中的一行。在 Oracle(至少 11G 或更早版本)中,这只能通过触发器来实现。
  • 我想foreign key 足以防止同样的事情发生。 FYR SqlFiddle。尝试删除 salhead 中的任何行,你会得到错误
  • 你的小提琴演奏得很好:)。我收回我的声明!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2018-06-10
  • 2019-10-05
  • 1970-01-01
  • 2021-05-29
相关资源
最近更新 更多