如何使用liquibase在列数据库上将默认值设置为0?

时间:2015-05-28 15:23:35

标签: java mysql hibernate liquibase

我正在使用liquibase。我有一个User表,其列定义如下:

<column name="referralClicks" type="int"/>

当我第一次在数据库中保存我的用户时。 referralClicks为null。但我想设置一个默认值(0),我尝试了以下配置:

 <addDefaultValue 
            columnDataType="int"
            columnName="referralClicks"
            defaultValueNumeric="0"
            tableName="USER"/>
   </changeSet>

我使用MySQL数据库。在结构中,我可以看到默认值设置为0。 enter image description here

但是当我有数据时,referralClicks为null: enter image description here

在代码中,我也会在未设置时检索空值。

Integer referralClicks = user.getReferralClicks();

我缺少什么?

3 个答案:

答案 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>