首页 > 解决方案 > ORA-00905: 缺少关键字(从教科书复制)

问题描述

尝试上下查看代码,但无法使其正常工作。主要是尝试创建表功能。在尝试使用复合主键创建表之前工作正常。绝对难倒。任何帮助表示赞赏。

尝试删除键的名称,但随后被重定向到另一种错误:“无效数据类型”

Create Table Cust_Artist_EOI    (ArtistID   Number(38)  Not Null,
                                 CustomerID  Number(38)  Not Null,
                                 Constraint  Cust_Artist_EOI_PK Primary Key(ArtistID, CustomerID),
                                 Constraint  Cust_Artist_EOI_ArtistFK Foreign Key(ArtistID)
                                            References  MyArtist(ArtistID)
                                                On Update No Action
                                                On Delete Cascade,
                                 Constraint  Cust_Artist_EOI_CustFK  Foreign Key(CustomerID)
                                            References MyCustomer(CustomerID)
                                                On Update No Action
                                                On Delete Cascade);

标签: sqloracleddl

解决方案


问题是on update. 删除:

Create Table Cust_Artist_EOI  (
    ArtistID   Number(38)  Not Null,
    CustomerID  Number(38)  Not Null,
    Constraint  Cust_Artist_EOI_PK Primary Key(ArtistID, CustomerID),
    Constraint  Cust_Artist_EOI_ArtistFK Foreign Key(ArtistID)
        References  MyArtist(ArtistID) On Delete Cascade,
    Constraint  Cust_Artist_EOI_CustFK  Foreign Key(CustomerID)
        References MyCustomer(CustomerID) On Delete Cascade
 );

是一个 db<>fiddle。

如果您查看 Oracle 中外键约束的语法图,您会发现既不支持on update也不no action支持。

我不确定为什么no action不支持,因为这是默认行为(我认为能够表达默认行为是个好主意)。

不支持on update是更好的主意。它不鼓励对主键进行更改。更改主键通常是个坏主意。


推荐阅读