2013-11-21 53 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

感谢您的意见。但是,我只是回到这里来回应其他用户的益处,以撰写您所写的相同解决方案。工作很好。 –