Ale*_*lec 19 unique-constraint liquibase
我正在创建一个包含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>
Run Code Online (Sandbox Code Playgroud)
但是有可能在一个<createTable>街区内完成吗?
另外,只是为了确认; 这会在两列上创建复合唯一约束,还是会创建两个独立的唯一约束?
小智 25
您可以阅读 liquibase手册,也可以在这里找到类似的问题
在你的情况下,它应该是:
<changeSet author="liquibase-docs" id="addUniqueConstraint-example">
<addUniqueConstraint
columnNames="id, product_id, tournament_id"
constraintName="your_constraint_name"
tableName="person"
/>
</changeSet>
Run Code Online (Sandbox Code Playgroud)
Ste*_*nie 16
我很确定:
liquibase update你会运行liquibase updateSQL.小智 8
createTable如果像我这样的人多年后仍然问自己这个问题:(到目前为止)如果您为约束提供相同的名称,则可以在标签本身内执行此操作:
<changeSet id="composite-unique-example" author="composite-unique-example">
<createTable tableName="example">
<column name="foo" type="bigint">
<constraints unique="true" uniqueConstraintName="foo-bar_unique"/>
</column>
<column name="bar" type="bigint">
<constraints unique="true" uniqueConstraintName="foo-bar_unique"/>
</column>
</createTable>
</changeSet>
Run Code Online (Sandbox Code Playgroud)
运行 Liquibase4.5.0和 MySQL 5.7:
mysql> insert into example (foo, bar) values (1, 2), (2, 1), (1, 3);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from example;
+------+------+
| foo | bar |
+------+------+
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
+------+------+
3 rows in set (0.00 sec)
mysql> insert into example (foo, bar) values (1, 2);
ERROR 1062 (23000): Duplicate entry '1-2' for key 'foo-bar_unique'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14252 次 |
| 最近记录: |