删除sql语句违反完整性约束

时间:2012-12-10 07:25:27

标签: java database eclipse hsqldb cascading-deletes

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

但hsqldb的正确语法是什么?

enter image description here

3 个答案:

答案 0 :(得分:5)

DELETE语句不支持“cascade”关键字(clearly documented in the manual

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

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;

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

答案 1 :(得分:2)

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

  

ALTER TABLE       添加[CONSTRAINT] FOREIGN KEY()       参考文献()       ON DELETE CASCADE;

     

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

之后你删除你的父记录,它也会推动子记录。

答案 2 :(得分: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
);