删除重复的唯一约束

时间:2018-07-08 09:25:57

标签: liquibase

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

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

E.G。:

<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>
    <addUniqueConstraint tableName="cars" columnNames="model_name" constraintName="cars_model_name_unique"/>
</changeSet>