我通过delete sql语句违反了Integrity约束。发生这种情况是因为表的id在另一个表中用作主键。但是我想通过使用CASCADE删除它们。
但hsqldb的正确语法是什么?
答案 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
);