【问题标题】:Integrity constraint violation by delete sql statement删除 sql 语句违反完整性约束
【发布时间】:2012-11-27 14:41:12
【问题描述】:

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

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

【问题讨论】:

  • 上次我检查时,HSQL db 没有 FK 约束...
  • 这是我得到的异常的图片
  • @AnanthaSharma HSQLDB 确实支持外键:HSQLDB 支持 PRIMARY KEY、NOT NULL、UNIQUE、CHECK 和 FOREIGN KEY 约束。此外,它还支持 UNIQUE 或普通索引。 (hsqldb.org/doc/1.8/guide/guide.html#N10255)
  • @AnanthaSharma:那么你“最后一次检查”大约是在 10 年前。

标签: java database eclipse hsqldb cascading-deletes


【解决方案1】:

DELETE 语句不支持“级联”关键字(即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;

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

【讨论】:

    【解决方案2】:

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

    更改表 添加[约束]外键() 参考 () 删除级联;

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

    删除父记录后,子记录也会删除。

    【讨论】:

      【解决方案3】:

      在当前版本的 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-01-02
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 2017-10-01
        相关资源
        最近更新 更多