【问题标题】:How to set default value to 0 on column database with liquibase?如何使用 liquibase 将列数据库的默认值设置为 0?
【发布时间】:2020-12-31 02:13:12
【问题描述】:

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

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

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

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

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

但是当我有数据时,referClicks 为空:

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

Integer referralClicks = user.getReferralClicks();

我错过了什么?

【问题讨论】:

  • 尝试在列标签中使用属性 defaultValueNumeric

标签: java mysql hibernate liquibase


【解决方案1】:

你可以像这样&lt;update&gt;你现有的数据:

<update tableName="USER">
    <column name="referralClicks" valueNumeric="0"/>
    <where>referralClicks IS NULL</where>
</update>

或如已用原始&lt;sql&gt; 所述:

<sql>
    UPDATE USER SET referralClicks = 0 WHERE referralClicks IS NULL
</sql>

【讨论】:

    【解决方案2】:

    为你不想为空的列添加一个约束,如下所示:

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

    【讨论】:

      【解决方案3】:

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

      UPDATE user 
       SET referralClicks = 0
      WHERE referralClicks IS NULL
      

      【讨论】:

      • 你是对的,但我在新数据库上执行我的 liquibase。当用户注册帐户时,默认值始终为 NULL。
      • 然后我会使用 mysql 管理工具查看数据库,看看是否正确应用了默认值。如果是这样,问题出在 MySQL 或您的客户端代码上。如果不是,那么问题可能在于 Liquibase 没有正确应用更改,或者用户在运行 Liquibase 时出错。
      • @Pracede 在 liquibase 中有一个 &lt;sql&gt;
      猜你喜欢
      • 2019-05-15
      • 1970-01-01
      • 2011-05-29
      • 2017-04-16
      • 2015-02-20
      • 2014-06-26
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多