【发布时间】:2017-09-30 22:27:05
【问题描述】:
我有一个应用程序启动 (AppStarter) 一个带有 Web 应用程序的 Web 服务器。 Web 应用程序具有迁移脚本 (flyway)。
我想通过 JDBC 将 AppStarter 中的一些数据写入表中。但是如果表不存在,我想创建它。该表也有一些限制。
在 AppStarter 中,我执行以下命令:
CREATE CACHED TABLE PUBLIC.CORE_USERROLE_TO_PARAMETER (
ID VARCHAR(32) PRIMARY KEY NOT NULL,
VERSION INTEGER,
USER_ID VARCHAR(32)NOT NULL,
ROLE_ID VARCHAR(32) NOT NULL,
PARAMETER VARCHAR(255) NOT NULL
);
ALTER TABLE PUBLIC.CORE_USERROLE_TO_PARAMETER ADD CONSTRAINT PUBLIC.CURTBP_USER_ID FOREIGN KEY(USER_ID) REFERENCES PUBLIC.CORE_USER(ID) NOCHECK;
ALTER TABLE PUBLIC.CORE_USERROLE_TO_PARAMETER ADD CONSTRAINT PUBLIC.CURTBP_ROLE_ID FOREIGN KEY(ROLE_ID) REFERENCES PUBLIC.CORE_USER_ROLE(ID) NOCHECK;
Web 应用程序还会从该表中读取一些信息并创建表。 现在我有了一个 sql 迁移脚本
CREATE CACHED TABLE IF NOT EXISTS PUBLIC.CORE_USERROLE_TO_PARAMETER (
ID VARCHAR(32) PRIMARY KEY NOT NULL,
VERSION INTEGER,
USER_ID VARCHAR(32)NOT NULL,
ROLE_ID VARCHAR(32) NOT NULL,
PARAMETER VARCHAR(255) NOT NULL
);
但是,只有当它们不存在时,我才如何创建约束呢?
提前致谢
目前我可以得到约束是否存在
select * from INFORMATION_SCHEMA.CONSTRAINTS WHERE CONSTRAINT_NAME='CURTRP_USER_ID'
但是如何使用 H2 将其构建到 if 查询中
编辑: 我可以将约束部分完全移动到迁移脚本中,但这似乎有点错误。
我正在使用 H2 数据库。
【问题讨论】:
-
你试过
IF NOT EXISTS吗?文档似乎表明这是可能的h2database.com/html/grammar.html#constraint_name_definition
标签: java sql migration h2 flyway