删除唯一约束的重复项

Remove duplicates for unique constraint

我的数据库中有一辆汽车 table,列为 model_name。 我需要在 model_name 列上添加唯一约束,但其中有很多重复值。

这就是为什么如果我尝试 <addUniqueConstraint>,我的 changeSet 会失败。那么有没有办法在添加唯一约束之前删除所有重复项?

谢谢你的帮助。

根据 liquibase official documentation 开箱即用是不可能的。

您可以使用 <sql> 标签删除所有重复项,然后使用 <addUniqueConstraint>.

例如:

<changeSet author="changeset-author" id="changeset-id">
    <preConditions onFail="MARK_RAN">
        <columnExists tableName="cars" columnName="model_name"/>
    </preConditions>
    <sql>
        DELETE c1 FROM cars c1, cars c2 WHERE c1.id > c2.id AND c1.model_name = c2.model_name;
    </sql>
    <!--or as was suggested by @JavaDevSweden-->
    <sql>
        DELETE FROM cars WHERE id in (SELECT c1.id FROM cars c1, cars c2 WHERE c1.id > c2.id AND c1.model_name = c2.model_name);
    </sql>
    <addUniqueConstraint tableName="cars" columnNames="model_name" constraintName="cars_model_name_unique"/>
</changeSet>