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

问题描述 投票:0回答:4

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

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

当我第一次将我的用户保存在数据库中时。 ReferralClicks 为空。但我想设置默认值(0)并且我尝试了以下配置:

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

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

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

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

Integer referralClicks = user.getReferralClicks();

我错过了什么?

java mysql hibernate liquibase
4个回答
3
投票

您可以

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

2
投票

为您不希望为空的列添加约束,如下所示:

        <column name="columnName" type="int" defaultValueNumeric="0">
           <constraints nullable="false" />
        </column>

0
投票

当您更改数据库中的列以设置默认值时,不会更新数据库中的现有行。您必须编写某种更新脚本来更新现有的空值。像这样的东西:

UPDATE user 
 SET referralClicks = 0
WHERE referralClicks IS NULL

0
投票

您可以为任何数据类型(int、enum 等)设置这样的默认值。

<!--ini-->
<column name="referral_clicks" type="INT DEFAULT 0">
  <constraints nullable="false"/>
</column>

<!--enum-->
<column name="my_type" type="ENUM('TYPE_1','TYPE_2') DEFAULT 'TYPE_1'">
  <constraints nullable="false"/>
</column>

© www.soinside.com 2019 - 2024. All rights reserved.