Liquibase:如何删除没有约束名称的唯一约束?

day*_*mer 13 java liquibase

这就是我的专栏的样子

        <column name="name" type="VARCHAR(255)">
            <constraints nullable="false" unique="true"/>
        </column>
Run Code Online (Sandbox Code Playgroud)

我想删除unique=true约束.

我看了liquibase提供了什么,它有

<changeSet author="liquibase-docs" id="dropUniqueConstraint-example">
    <dropUniqueConstraint catalogName="cat"
            constraintName="const_name"
            schemaName="public"
            tableName="person"
            uniqueColumns="A String"/>
</changeSet>
Run Code Online (Sandbox Code Playgroud)

既然constraintName是必需的,我没有它,我有什么选择?

我怎样才能unique=true使用liquibase?

小智 5

我最终创建了一个新列来替换具有唯一约束的列。

<addColumn tableName="TABLE" schemaName="SCHEMA">
<column name="NEW_COLUMN" type="TYPE" valueComputed="OLD_COLUMN"></column>
</addColumn>

<dropColumn tableName="TABLE" schemaName="SCHEMA" columnName="OLD_COLUMN"/>

<renameColumn tableName="TABLE" schemaName="SCHEMA" oldColumnName="NEW_COLUMN" newColumnName="OLD_COLUMN"/>
Run Code Online (Sandbox Code Playgroud)

  • 它适用于能够正确删除列以及索引、外键等的 DBA。MSSQL 不是其中之一,因此“技巧”依赖于 DB。 (3认同)

Mic*_*ker -1

我认为你最好的选择是查询你的信息模式数据库以查找名称是什么,然后使用它通过 ChangeLog 删除它

这对我有用:

SELECT `CONSTRAINT_NAME`
FROM  `TABLE_CONSTRAINTS` 
WHERE  `CONSTRAINT_TYPE` LIKE  'UNIQUE'
Run Code Online (Sandbox Code Playgroud)

当然,这将返回数据库中的每个唯一约束名称,但您应该能够从那里缩小搜索范围。

  • 他要求提供一种液体碱溶液。每个人都知道如何将其侵入数据库...... (2认同)