sql - 如何执行无序的 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 构建目标的一部分运行。
解决方案
对于带有非常大的乱序脚本的批量插入,您可以使用以下命令禁用引用完整性检查:
SET DATABASE REFERENTIAL INTEGRITY FALSE
请参阅http://hsqldb.org/doc/2.0/guide/management-chapt.html#mtc_sql_settings了解如何在插入后检查可能的违规行为。
推荐阅读
- python - 如何尽可能快地抓取页面?
- php - 如何将 for 循环的结果作为数组存储在 res 变量中?
- php - 包括
endforeach 语句后的标记
- sql - SQL JOIN 如果存在
- javascript - Laravel + React (Typescript/Javascript) - 如何编译任何带有扩展文件(js、jsx、ts、tsx)的模块?
- python - Python - mysql - 记录生成警告的查询
- angular - 移除primeng p-tree组件中的边框以进行扩展
- android - 循环约束和“缺少约束”错误
- r - ggplot2 结合 rworldmap
- asp.net - 无效的 web.config 导致 HTTP 502.5 错误