"ON UPDATE CASCADE ON DELETE CASCADE" 的语法错误

Syntax Error for "ON UPDATE CASCADE ON DELETE CASCADE"

很抱歉提出这样一个愚蠢的问题,但我正在尝试提出两个 table:parent 和 child。 parent还有多个其他的children,而且好像都是这个错误。谁能告诉我为什么这么说?我正在使用 Sql.

我已经尝试重写整个 table,并尝试仅使用 on delete 或 update cascade 单独使用,但它不起作用。我尝试研究其他类似的问题,但其中 none 告诉了我这样做的原因。

parent table;已经创建,没有问题。

create table Person(
SSN int,
FName Varchar(30),
LName Varchar(30) Not Null,
Address Varchar(30) Not Null,
Age int Not Null,
Gender VarChar(20) not Null,
Phone Varchar(200) Not Null,
Primary key(SSN),
Check (Age >0)
);

而这个(医生)就是child table。当我尝试 运行 查询时,它说我缺少关键字。但是什么词?

create table Doctor(
SSN int not Null,
Doc_id int not Null,
Dept_id int not Null,
HireDate Date not Null,
foreign key(SSN) references Person(SSN)
on update cascade on delete cascade
);

下面是另一个child class(以防万一有人想看)

create table Patient(
SSN int,
Pat_id int,
RegDate date not Null,
foreign key(SSN) references Person(SSN)
ON UPDATE CASCADE ON DELETE CASCADE
);

我也尝试删除该 RegDate 语句后的逗号,但它说我缺少右括号。

当我删除逗号时:

错误报告 - ORA-00907: 缺少正确的 parenthesis 00907.00000 - "missing right parenthesis" *原因:
*行动:


带逗号:

错误报告 - ORA-00905: 缺少关键字 00905.00000 - "missing keyword" *原因:
*行动:

我该怎么办?

Oracle 不支持 update 上的级联,仅支持 delete 上的级联。所以这很好用:

create table Doctor(
    SSN int not Null,
    Doc_id int not Null,
    Dept_id int not Null,
    HireDate Date not Null,
    foreign key(SSN) references Person(SSN) on delete cascade
);

here

这通常不是一个很大的限制,因为无论如何您都不应该更改主键值。

另外,不要将社会安全号码存储为整数。它们实际上是恰好是数字的字符串。至少在美国,它们可以有前导零。