我以前从未使用过 Liquibase,只是不知道如何解决这个问题。我最近加入的项目是对旧项目的翻版,所以我们必须坚持使用旧数据库,它的架构设计得很糟糕。数据库不使用外键约束,因此仍有条目指向不再存在的条目。就我而言,是一位医生在数据库中不存在的银行拥有银行账户。到目前为止,我的团队处理这些问题的方式是用 NULL 覆盖 ID。所以基本上我要做的是将所有银行账户 ID 设置为 NULL,当银行不存在时。我为完成此任务而编写的 SQL 代码如下:
UPDATE DOCTOR SET FK_BANKID = NULL WHERE FK_BANKID NOT IN (SELECT ID FROM BANK);
有人告诉我将该修复程序集成到我们的 Liquibase 变更集中,但我就是不知道该怎么做。这是我到目前为止所做的:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
<changeSet id="remove_fk_bankid" author="v7">
<update tableName="DOCTOR">
<column name="FK_BANKID" value="NULL" />
<where>FK_BANKID NOT IN (SELECT ID FROM BANK)</where>
</update>
</changeSet>
</databaseChangeLog>
Liquibase 更新运行没有错误,但是当我之后查看数据库时,什么都没有改变。有人对我如何解决这个问题有任何指示吗?