【发布时间】:2011-08-25 03:19:26
【问题描述】:
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 声明。我正在清理生成的结果并想删除其中一个声明,并想知道这是否合适。
【问题讨论】:
标签: sql database database-migration liquibase changelog