在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>
标签来实现呢?