在 Liquibase 中添加复合唯一约束

Adding composite unique constraint in Liquibase

我正在创建一个有 3 列的 link table; id, product_id, tournament_id.

向 "id" 列添加一个 uniqueConstraint 是微不足道的,但我想确保任何一对 (product_id, tournament_id) 都是唯一的。

Liquibase.org 处的示例显示

<changeSet author="liquibase-docs" id="addUniqueConstraint-example">
<addUniqueConstraint catalogName="cat"
        columnNames="id, name"
        constraintName="const_name"
        deferrable="true"
        disabled="true"
        initiallyDeferred="true"
        schemaName="public"
        tableName="person"
        tablespace="A String"/>
</changeSet>

但是否可以在 <createTable> 块内完成此操作?

另外,确认一下;这会在两列上创建一个复合唯一约束,还是会创建两个单独的唯一约束?

我很确定:

  1. 不能在 createTable 标记本身内执行此操作,但您可以 在与创建 table 时相同的变更集中执行此操作。
  2. 确实在两列上创建复合唯一约束。您可以检查的一种方法是 运行 liquibase 使用命令生成 SQL 用于更新,而不是 运行ning 更新命令并检查它对您的数据库做了什么。在命令行上,而不是 运行ning liquibase update 你会 运行 liquibase updateSQL.

你可以阅读 liquibase manual also similar problem you can find

在你的情况下应该是:

<changeSet author="liquibase-docs" id="addUniqueConstraint-example">
<addUniqueConstraint
        columnNames="product_id, tournament_id"
        constraintName="your_constraint_name"
        tableName="person"
        />
</changeSet>