2013-11-21 51 views
1

我有一個包含NULL值的表。此表僅用於存儲數字值,除了包含每個記錄的時間戳的第二列以外。這個表已經使用了一段時間,所以在不同的列中累積了很多NULL值。從現在起被添加任何NULL值MySQL ALTER/UPDATE表

  • :這裏的表的描述:

    +-----------------------------------------+-----------+------+-----+-------------------+----------------+ 
    | Field         | Type  | Null | Key | Default   | Extra   | 
    +-----------------------------------------+-----------+------+-----+-------------------+----------------+ 
    | results_id        | int(11) | NO | PRI | NULL    | auto_increment | 
    | time_stamp        | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
    | test_col        | int(11) | YES |  | NULL    |    | 
    | test_col-total       | int(11) | YES |  | NULL    |    | 
    | test_col_B        | int(11) | YES |  | NULL    |    | 
    | test_col_B-total      | int(11) | YES |  | NULL    |    | 
    +-----------------------------------------+-----------+------+-----+-------------------+----------------+ 
    

    12行中集合(0.01秒)

    我現在要更新/改變表,以便對錶進行處理並將其處理爲'0'值(真的很想知道這是否確實可行;如果是這樣,那麼我不需要在其他地方的很多Python腳本中更改INSERT查詢的負載!)

  • 所有存儲的NULL值都是up過時/更改爲「0」。

我完全堅持這一點,因爲一方面我希望我的SQL查詢更新新的規則到表中,而另一個更改當前的NULL值和作爲新手這是一個稍微更中間的我的目前的瞭解。

到目前爲止,我有:

ALTER TABLE `results` MODIFY `<col_name>` INT(11) NOT NULL; 

我會做到這一點對每個當前允許NULL值的列。但是,我不知道如何將存儲的NULL值更改爲'0'。

任何輸入讚賞。

+0

好......所以首先你要做一個'update'查詢,把所有的空值爲零將被添加。那麼你想修改每一列並且使它相同,除了添加一個'default 0'(和一個'not null') –

+1

'update table_name set test_col = ifnull(test_col,0)'並且做那個爲每個列,所以他們有0的,而不是空值...... –

+0

謝謝你,偉大的作品。 –

回答

2

改變NULL值設置爲0 嘗試

UPDATE results SET `col_name` = 0 WHERE `col_name` IS NULL; 


改列有NOT NULL和默認爲0,嘗試

ALTER TABLE results MODIFY `col_name` INT(11) NOT NULL DEFAULT 0; 


你必須這樣做,在上面的命令,我只是測試這對http://sqlfiddle.com/

+0

當時我回答這個問題太糟糕了,我不知道sqlfiddle可以讓你用代碼鏈接到你的例子,所以代碼不見了,我只有鏈接到sqlfiddle.com –

0

首先改變你的值設置爲0,他們是空:

UPDATE results SET col1 = 0 WHERE col1 IS NULL; 
... 

然後你就可以添加默認值爲0,即每當您提供該表的任何值上插入

ALTER TABLE `results` MODIFY `<col_name>` INT(11) NOT NULL DEFAULT 0; 
+0

感謝您的意見。但是,我只是回到這裏來回應其他用戶的益處,以撰寫您所寫的相同解決方案。工作很好。 –