我正在使用liquibase。我有一个User表,其列定义如下:
<column name="referralClicks" type="int"/>
当我第一次在数据库中保存我的用户时。 referralClicks为null。但我想设置一个默认值(0),我尝试了以下配置:
<addDefaultValue
columnDataType="int"
columnName="referralClicks"
defaultValueNumeric="0"
tableName="USER"/>
</changeSet>
我使用MySQL数据库。在结构中,我可以看到默认值设置为0。
但是当我有数据时,referralClicks为null:
在代码中,我也会在未设置时检索空值。
Integer referralClicks = user.getReferralClicks();
我缺少什么?
答案 0 :(得分:1)
您可以使用以下内容<update>
使用现有数据:
<update tableName="USER">
<column name="referralClicks" valueNumeric="0"/>
<where>referralClicks IS NULL</where>
</update>
或已经说明了原始<sql>
:
<sql>
UPDATE USER SET referralClicks = 0 WHERE referralClicks IS NULL
</sql>
答案 1 :(得分:0)
更改数据库中的列以设置默认值时,不会更新数据库中的现有行。您必须编写某种更新脚本来更新现有的空值。像这样:
UPDATE user
SET referralClicks = 0
WHERE referralClicks IS NULL
答案 2 :(得分:0)
为不想为空的列添加约束,如下所示:
<column name="columnName" type="int" defaultValueNumeric="0">
<constraints nullable="false" />
</column>