2

删除 sql 语句违反了完整性约束。发生这种情况是因为一个表的 id 在另一个表中用作主键。但是我还是想通过使用 CASCADE 删除它们。

但是 hsqldb 的正确语法是什么?

在此处输入图像描述

4

3 回答 3

5

DELETE语句不支持“级联”关键字(手册中有明确记录

您需要设置外键约束以级联删除:

create table playlist
(
   id integer primary key not null, 
   ... other columns ...
);

create table playlistmovies
(
   id integer primary key not null,
   playlist_id integer not null,
   ... other columns
);

alter table playlistmovies
   add constraint fk_plm_playlist
   foreign key (playlist_id) references playlist(id)
   on delete cascade;

然后,当您删除播放列表时,引用该播放列表的所有行也会被删除。

于 2012-12-10T07:40:15.147 回答
2

在创建子表时,您在外键约束中添加“删除级联”,如下所示。

ALTER TABLE ADD [CONSTRAINT] FOREIGN KEY () REFERENCES () ON DELETE CASCADE;

使用与在表定义中指定外键时相同的约束语法向表中添加外键约束。

之后,您删除您的父记录,它也会删除子记录。

于 2012-12-10T07:42:10.730 回答
1

在 HSQLDB 的当前版本(我使用的是 2.5.0)中,可以在列定义语句上指定 ON DELETE CASCADE 修饰符,不需要使用 ALTER TABLE 添加它。这允许简洁、更易读的 SQL。

例如,这有效:

CREATE TABLE IF NOT EXISTS TestRecord
(
    -- Primary key column
    id        INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,

    -- Example fields
    sValue    VARCHAR(100),
    iValue    INTEGER,
);


CREATE TABLE IF NOT EXISTS TestRecordJoin
(
    -- Foreign key column, specifying cascade delete behavior.
    kRecord INTEGER     NOT NULL FOREIGN KEY REFERENCES TestRecord ON DELETE CASCADE,

    -- Example fields
    sValue2 VARCHAR(64) NOT NULL,
    iValue2 INTEGER     NOT NULL
);
于 2019-08-04T00:54:51.763 回答