Как обновить столбец с нулевым значением


148

Я использую mysql и мне нужно обновить столбец с нулевым значением. Я пробовал это разными способами, и лучшее, что я получил, это пустая строка.

Есть ли специальный синтаксис для этого?


4
Разрешает ли столбец значение NULL?
тыкай

8
ОБНОВЛЕНИЕ таблицы SET столбец = NULL ГДЕ ...; не работает?

1
Нет, совсем нет. Это действительно странно
Джим

Ответы:


226

Нет специального синтаксиса:

CREATE TABLE your_table (some_id int, your_column varchar(100));

INSERT INTO your_table VALUES (1, 'Hello');

UPDATE your_table
SET    your_column = NULL
WHERE  some_id = 1;

SELECT * FROM your_table WHERE your_column IS NULL;
+---------+-------------+
| some_id | your_column |
+---------+-------------+
|       1 | NULL        |
+---------+-------------+
1 row in set (0.00 sec)

Спасибо Даниэль. Я как бы убежден, что эта проблема может лежать в коде моего приложения
Джим

42

NULLэто специальное значение в SQL. Итак, чтобы обнулить свойство, сделайте это:

UPDATE table SET column = NULL;

Теперь позвольте мне уточнить. Через php я использую PDO и обновляю запрос.
Джим

1
В руководстве MySQL говорится, что, если столбец не допускает значения NULL, установка его в значение NULL приведет к значению по умолчанию для типа данных (например, пустой строки). Вы на 100% что ваш столбец допускает NULL? Можете ли вы показать нам CREATE TABLE?

Я уверен на 1000%. Я проверил это дважды. Позвольте мне посмотреть еще раз.
Джим

Да, это фактически ноль. Я могу видеть NULL, полученный моим программным обеспечением frnt end, в данных, которые должны быть нулевыми.
Джим

20

Используйте ISвместо = этого, чтобы решить синтаксис вашего примера проблемы:

UPDATE studentdetails
SET contactnumber = 9098979690
WHERE contactnumber IS NULL;

6

Не забудьте посмотреть, если ваш столбец может быть нулевым. Вы можете сделать это с помощью

mysql> desc my_table;

Если ваш столбец не может иметь значение NULL, при установке значения на NULL это будет приведенное значение.

Вот пример

mysql> create table example ( age int not null, name varchar(100) not null );
mysql> insert into example values ( null, "without num" ), ( 2 , null );
mysql> select * from example;
+-----+-------------+
| age | name        |
+-----+-------------+
|   0 | without num |
|   2 |             |
+-----+-------------+
2 rows in set (0.00 sec)

mysql> select * from example where age is null or name is null;
Empty set (0.00 sec)

4

Для тех, кто сталкивался с подобной проблемой, я обнаружил, что при «симуляции» SET = NULLзапроса PHPMyAdmin выдаст ошибку. Это красная сельдь .. просто запусти запрос и все будет хорошо.


Спасибо, я искал здесь, потому что PHPMyAdmin утверждал, что рядом с NULL было нераспознанное ключевое слово. Прочитав ваш ответ, я запустил запрос, и он был выполнен как задумано.
dading84

4

В приведенных выше ответах было предложено много способов и повторений для одного и того же. Я продолжал искать ответ, поскольку упомянутый вопрос - вопрос, но не мог найти здесь.

Но в противоположность вышеупомянутому вопросу «обновить столбец с нулевым значением» может быть «ОБНОВИТЬ ВСЕ СТРОКИ В КОЛОННЕ, ЧТОБЫ ПОЛУЧИТЬ»

В такой ситуации следующие работы

update table_name
set field_name = NULL
where field_name is not NULL;

isкак хорошо is notработает в MySQL



1

Другая возможная причина для пустой строки, а не истинного нуля, состоит в том, что поле является индексом или является частью индекса. Это случилось со мной: используя phpMyAdmin, я отредактировал структуру поля в одной из моих таблиц, чтобы разрешить NULL , установив флажок « Null », а затем нажав кнопку « Сохранить ». Появилось сообщение « Таблица цен была успешно изменена », поэтому я предположил, что изменение произошло - этого не произошло. После выполнения UPDATE для установки всех этих полей в NULL вместо них были заданы пустые строки , поэтому я снова взглянул на структуру таблицы и увидел, что « Null»столбец для этого поля был установлен на « нет ». Именно тогда я понял, что поле является частью первичного ключа !


1

Если вы хотите установить нулевое значение с помощью запроса на обновление, задайте для столбца значение NULL (без кавычек). Update tablename set columnname = NULL

Однако, если вы непосредственно редактируете значение поля в инструментальной среде mysql, используйте клавишу (Esc + del), чтобы вставить нулевое значение в выбранный столбец.


0

если вы будете следовать

UPDATE table SET name = NULL

то имя "" не NULL В MYSQL означает ваш запрос

SELECT * FROM table WHERE name = NULL не работать или разочаровывать себя


0

Я подозреваю, что проблема здесь в том, что кавычки были введены как литералы в вашем строковом значении. Вы можете установить эти столбцы в нуль, используя:

UPDATE table SET col=NULL WHERE length(col)<3;

Конечно, вы должны сначала проверить, что эти значения действительно "" с чем-то вроде:

SELECT DISTINCT(col) FROM table WHERE length(col)<3;

0

если вы установите NULL для всех записей, попробуйте это:

UPDATE `table_name` SET `column_you_want_set_null`= NULL

ИЛИ просто установите NULL для специальных записей, используйте WHERE

UPDATE `table_name` SET `column_you_want_set_null`= NULL WHERE `column_name` = 'column_value' 
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.