2013-11-21 5 views
1

У меня есть таблица, содержащая значения NULL. Эта таблица предназначена только для хранения числовых значений, за исключением второго столбца, который содержит отметку времени для каждой записи. Эта таблица использовалась в течение некоторого времени и поэтому накопила много значений NULL в разных столбцах. Вот описание стола:MySQL ALTER/UPDATE table

+-----------------------------------------+-----------+------+-----+-------------------+----------------+ 
| 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 сек)

теперь я хочу, чтобы обновить/изменить таблицу так, чтобы:

  • теперь любое значение NULL добавляется к таблице обрабатывается и обрабатывается как значение «0» (действительно интересно знать, действительно ли это возможно, если это тогда, мне не нужно будет менять нагрузку запросов INSERT во многих моих сценариях Python в другом месте!)
  • все сохраненные значения NULL от/изменено на «0».

Я полностью застрял в этом, потому что, с одной стороны, я хочу, чтобы мой SQL-запрос обновил новое правило в таблице, а на другом изменил текущие значения NULL и как новичок, это немного более промежуточное для моего текущее понимание.

До сих пор у меня есть:

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

И я буду делать это для каждого столбца, который в настоящее время позволяет NULL значения. Однако я не знаю, как изменить сохраненные значения NULL на «0».

Любой ввод оценивается.

+0

okay ... так что сначала вы хотите выполнить запрос «update», чтобы все нули были нули нули. то вы хотите изменить каждый столбец и сделать его тем же, кроме добавления к нему «default 0» (и «не 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; 
... 

Затем вы можете добавить DEFAULT 0, что будет добавляться всякий раз, когда вы не укажете значения этой таблицы на вставке

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

Спасибо за ваш вклад.Тем не менее, я просто возвращался сюда, чтобы ответить на то, чтобы другие пользователи могли написать то же самое решение, которое вы написали. Отлично. –