mysql使用default給列設置默認值的問題


背景:

業務發展需要,需要復用歷史的表,並且通過表里面原來一個未使用的字段來區分不同的業務。
於是想到通過default來修改列的默認值:
	alter table A modify column biz default 'old' comment '業務標識 old-老業務, new-新業務'

現象:

上線幾天之后,業務反饋舊業務的相關數據查詢不到了。找后台運維查生產數據庫,發現歷史數據的biz字段還是null

原因:

自己在本地mysql數據庫試了下,好像的確是default沒法修改歷史數據為null 的值。這就尷尬了。
看起來add column和modify column在default的語義上處理不一樣,對於add column,會將歷史為null的值刷成default指定的值。而對於modify column,只會對新數據產生影響,歷史數據仍然會保持為null。

總結

1. add column和modify column在default的語義上存在區別,如果想修改大表歷史數據的值,建議給一個新的update語句(不管是add column還是modify column,減少ddl執行的時間)
2. 即使指定了default的值,如果insert的時候強制指定字段的值為null,入庫還是會為null
3. 如果僅僅是修改某一個字段的默認值,可以使用 alter table A alter column c set default 'c'; 
用這種方式來替換modify,會省去重建表的操作,只修改frm文件,效率會大大提升。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM