Liquibase 有两种方法可以将列定义为唯一的:
创建表时,
<constraints>
在列上使用:<createTable tableName="my_table"> <column name="my_column"> <constraints unique="true" uniqueConstraintName="my_table_my_column_uk"> </column> </createTable>
创建表后,使用
<createIndex>
:<createTable tableName="my_table"> <column name="my_column"/> </createTable> <createIndex tableName="my_table" unique="true" indexName="my_table_my_column_uk"> <column name="my_column"/> </createIndex>
对于单列唯一键,这两种方法之间有什么区别吗?
在我自己对 MySQL 的观察中,似乎没有区别。两个声明(上面)产生相同的SHOW CREATE TABLE
结果:
...
UNIQUE_KEY `my_table_my_column_uk` (`my_column`)
...
但是,这是否适用于所有数据库实现,或者是否会为不同的数据库<createIndex unique="true">
生成不同的模式输出<constraint unique="true"/>
?
背景:我有一个脚本,它直接从代码中的关系模型构建了 liquibase 更改日志。如果模型指示列是唯一的,则生成脚本会创建 BOTH 声明。我正在清理生成的结果,并想删除其中一个声明,并想知道这是否合适。