首页 > 解决方案 > 在 CREATE TABLE 中使用 ON DELETE/UPDATE 时出现缺少关键字错误

问题描述

我刚刚开始学习 SQL,在尝试创建自己的表时,我遇到了一个障碍,因为我无法找出到底哪里出了问题。

如果我在错误的地方发布此类查询,请原谅我,但我很迷茫,因为我完全不知道哪里出了问题......

我在我的 SQL Developer 中遇到以下问题(我使用的服务器源自使用 IP 地址连接的学校服务器,但我能够获得其版本 - Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production,不确定是否有帮助)

ORA-00905: missing keyword
00905. 00000 -  "missing keyword"

其中表中“更新”一词MYWORK用红色下划线。

我的代码语句如下:

CREATE TABLE MYARTIST
(
    MyArtistID Int NOT NULL,
    LastName Char(25) NOT NULL,
    FirstName Char(25) NOT NULL,
    CONSTRAINT MyArtistPK PRIMARY KEY(MyArtistID)
);

-- This block is giving me issues, with errors stemming from the FOREIGN KEY portion 
CREATE TABLE MYWORK
(
    MyWorkID Int NOT NULL,
    Title Char(25) NOT NULL,
    Copy Char(25) NOT NULL,
    MyArtistID Int NOT NULL,
    CONSTRAINT MyWorkPK PRIMARY KEY(MyWorkID),
    CONSTRAINT MyArtistFK FOREIGN KEY(MyArtistID) REFERENCES MYARTIST(MyArtistID)
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
);

CREATE TABLE MYARTISTWORK
(
    MyArtistID INT NOT NULL,
    MyWorkID INT NOT NULL,
    CONSTRAINT MyArtWorkPK PRIMARY KEY(MyArtistID, MyWorkID),
    CONSTRAINT ArtFK FOREIGN KEY(MyArtistID) REFERENCES MYARTIST(MyArtistID)
        ON UPDATE NO ACTION
        ON DELETE CASCADE,
    CONSTRAINT WorkFK FOREIGN KEY(MyWorkID) REFERENCES MYWORK(MyWorkID)
        ON UPDATE NO ACTION
        ON DELETE CASCADE
);

如果我删除ON UPDATE... ON DELETE...语句,则表会正确创建,但如果我包含在语句中,则不是这样。有什么见解吗?

PS - 我使用的代码语句与我正在阅读的一本书类似 - Database Processing: Fundamentals, Design, and Implementation, Global Edition

标签: sqloracle

解决方案


答案很简单——在 Oracle 中,没有ON UPDATE这样的子句——删除它。你可以离开ON DELETE(如果它做某事;如果是NO ACTION,你可以省略它)。


推荐阅读