我正在使用 liquibase。我有一个用户表,其中的列定义如下:
<column name="referralClicks" type="int"/>
当我第一次将我的用户保存在数据库中时。 ReferralClicks 为空。但我想设置默认值(0)并且我尝试了以下配置:
<addDefaultValue
columnDataType="int"
columnName="referralClicks"
defaultValueNumeric="0"
tableName="USER"/>
</changeSet>
我使用MySQL数据库。在该结构中,我可以看到默认值设置为 0。
但是当我有数据时,referralClicks 为空:
在代码中,如果未设置此值,我也会检索空值。
Integer referralClicks = user.getReferralClicks();
我错过了什么?
为您不希望为空的列添加约束,如下所示:
<column name="columnName" type="int" defaultValueNumeric="0">
<constraints nullable="false" />
</column>
当您更改数据库中的列以设置默认值时,不会更新数据库中的现有行。您必须编写某种更新脚本来更新现有的空值。像这样的东西:
UPDATE user
SET referralClicks = 0
WHERE referralClicks IS NULL
您可以为任何数据类型(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>