首页 > 解决方案 > 如何执行无序的 SQL 脚本

问题描述

我有一个 SQL 脚本,但脚本中的语句顺序存在问题

例如

INSERT INTO PERMISSIONS_FOR_ROLE (ROLE_ID, PERMISSION_ID) VALUES (3, 8);
INSERT INTO permissions (id, name) VALUES (8, 'update');

脚本中出现的顺序应该是相反的!这会导致错误,因为在执行第一条语句时尚未插入 id 为 8 的外键

导致:

[Code: -177, SQL State: 23503]  integrity constraint violation: 
foreign key no parent; PERMISSIONS_FOR_ROLE_PERM_FK table: PERMISSIONS_FOR_ROLE value: 8

用于创建关系的语句如下

create table PERMISSIONS ( ID bigint not null, NAME varchar(255), primary key (ID) );

create table PERMISSIONS_FOR_ROLE ( ROLE_ID bigint not null, PERMISSION_ID bigint not null, primary key (ROLE_ID, PERMISSION_ID) );

alter table PERMISSIONS_FOR_ROLE add constraint permissions_for_role_perm_fk foreign key (PERMISSION_ID) references PERMISSIONS;

关于如何执行这样的脚本有什么建议吗?我尝试手动更改顺序并且脚本正确执行,但是有没有其他方法可以作为 ANT 构建目标的一部分运行。

标签: sqlhsqldb

解决方案


对于带有非常大的乱序脚本的批量插入,您可以使用以下命令禁用引用完整性检查:

SET DATABASE REFERENTIAL INTEGRITY FALSE 

请参阅http://hsqldb.org/doc/2.0/guide/management-chapt.html#mtc_sql_settings了解如何在插入后检查可能的违规行为。


推荐阅读