在Liquibase中添加复合唯一约束

时间:2015-01-28 12:47:04

标签: liquibase unique-constraint

我创建一个包含3列的链接表; id,product_id,tournament_id。

将一个uniqueConstraint添加到" id"列很简单,但我想确保任何一对(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>块内完成此操作吗?

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

2 个答案:

答案 0 :(得分:15)

我很确定:

  1. 无法 在createTable标记内执行此操作,但您 可以 在与创建表时相同的变更集。
  2. 在两列上创建复合唯一约束。您可以检查的一种方法是使用命令运行liquibase以生成用于更新的SQL,而不是运行update命令并检查它对您的数据库的作用。在命令行上,您可以运行liquibase update
  3. ,而不是运行liquibase updateSQL

答案 1 :(得分:2)

你可以阅读liquibase manual也可以找到类似的问题here

在你的情况下应该是:

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