2015-05-28 51 views
2

我正在使用liquibase。我有一個用戶表,定義如下的列:如何使用liquibase將列數據庫的默認值設置爲0?

<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(); 

我在想什麼?

+0

與屬性_defaultValueNumeric_嘗試在列標籤 – hotfix

+0

這就是我所做的 – Pracede

回答

0

當您更改數據庫中的列以設置默認值時,它不會更新數據庫中的現有行。您將不得不編寫某種更新腳本來更新現有的空值。事情是這樣的:

UPDATE user 
SET referralClicks = 0 
WHERE referralClicks IS NULL 
+0

你是對的,但我在新的數據庫上執行我的liquibase。當用戶註冊帳戶時,默認值始終爲NULL。 – Pracede

+0

我會使用mysql管理工具查看數據庫,然後查看默認值是否已正確應用。如果是這樣,問題是與MySQL或您的客戶端代碼。如果沒有,那麼問題可能是Liquibase沒有正確應用更改,或者運行Liquibase的用戶錯誤。 – SteveDonie

+0

@Pracede在liquibase中有一個[''](http://www.liquibase.org/documentation/changes/sql.html) –

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> 
相關問題