在Oracle 9i中声明外键出现了问题。我已经查看了一些SO和在线文档(例如http://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php)的示例,但并没有真正的好运;尝试类似于链接中的语法会生成相同的错误:
Error at Command Line:19 Column:4
Error report:
SQL Error: ORA-02253: constraint specification not allowed here
02253. 00000 - "constraint specification not allowed here"
*Cause: Constraint specification is not allowed here in the statement.
*Action: Remove the constraint specification from the statement.
以下是SQL代码摘录。 "第19行"指的是以
CONSTRAINT
开头的行。CREATE TABLE Flight (
flight_no varchar2(10) NOT NULL,
airplane_id varchar2(20) NOT NULL
CONSTRAINT flight_airplane_id_fk FOREIGN KEY (airplane_id) REFERENCES Airplane (airplane_id)
ON UPDATE RESTRICT ON DELETE RESTRICT,
dept_date date NOT NULL,
...
另外,尝试不使用CONSTRAINT
关键字会生成一个错误,关于缺少右括号的错误,但我似乎看不到缺少的右括号。
PS:我知道在Oracle中,ON UPDATE RESTRICT是默认行为,但我更喜欢尽可能明确。
ON DELETE
子句,则默认情况下,如果存在子行,则会阻止删除父行。ON DELETE SET NULL
将子项的父键设置为NULL
,如果删除父项,则创建孤儿。ON DELETE CASCADE
如果删除父项,则完全删除子记录。获取默认行为的唯一方法是省略ON DELETE
子句--似乎ON DELETE NO ACTION
不是有效语法。 - Justin Cave