在一个变更集中将具有非空值和唯一约束的值添加为UUID的列

时间:2018-11-08 12:32:38

标签: mysql spring-boot constraints uuid liquibase

mysql数据库中,我有user表,我需要添加user_key列,其中值将被计算为uuid()。此列中的值应唯一且不能为null。

所以我写了这个变更集:

   <changeSet id="foo" author="bar">
        <preConditions>
            <not>
                <columnExists tableName="user" columnName="user_key"/>
            </not>
        </preConditions>
        <addColumn tableName="user">
            <column name="user_key" type="varchar(36)" defaultValueComputed="uuid()" (or valueComputed="uuid()")>
                <constraints unique="true" nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

,但失败并出现以下错误(这是合理的,因为MySQL不允许将函数用作默认值):

  

错误:您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本以使用正确的语法   在第1行的'uuid()NOT NULL'附近

     

[失败的SQL:ALTER TABLE   用户添加user_key VARCHAR(36)默认uuid()否   NULL]

但是defaultValueComputed(或valueComputed)不应该处理吗?

当然,我可以通过编写多个变更集来创建这样的列(创建列,使用uuid()更新其值,添加约束),但是是否可以仅使用<addColumn>标签来实现呢?

0 个答案:

没有答案