Запрос mysql update не обновляет все столбцы?

update short_url 
  set redirected="2018-08-10 15:07:44", 
  count=count+1 
  where long_val="EF7219D6-606D-409B-BEF1-00FFF9FF713C";

+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| short_val  | varchar(8)  | NO   | PRI | NULL    |       |
| long_val   | varchar(36) | NO   | PRI | NULL    |       |
| created    | datetime    | YES  |     | NULL    |       |
| redirected | datetime    | YES  |     | NULL    |       |
| count      | int(11)     | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+

Дата перенаправления обновляется с этим обновлением, но счетчик не добавляет?

обратите внимание, что NULL + anything - это NULL

Alex K. 10.08.2018 15:18

Возможно, измените значение по умолчанию для count на 0 вместо того, чтобы делать его допускающим значение NULL.

Michael Berkowski 10.08.2018 15:20

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

symcbean 10.08.2018 15:26

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

Monty 10.08.2018 15:29

Вы можете принять подробный ответ @ spencer7593. Для форматирования выделите блок текста и нажмите ctrl + k или щелкните значок {} на панели инструментов редактирования или сделайте отступ для всех строк с 4 пробелами.

Alex K. 10.08.2018 15:31

@symcbean: COUNT не является зарезервированным словом MySQL. Да, идентификаторы можно заключать в обратные кавычки.

spencer7593 10.08.2018 15:32

Быстрый Google подсказывает, что вы правы, это не зарезервированное слово mysql, но оно есть в Oracle и transact-sql.

symcbean 10.08.2018 15:34
1
7
231
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Что вам нужно сделать, так это убедиться, что значение по умолчанию в поле count установлено на 0, а не на NULL.

Принуждение к произвольному значению - неправильное решение, даже если OP считает null == 0 (что не было указано в вопросе)

symcbean 10.08.2018 15:29
Ответ принят как подходящий

Мы можем проверить значение NULL и заменить NULL ненулевым значением, например ...

UPDATE short_url t 
   SET t.redirected = '2018-08-10 15:07:44'
     , t.count = IFNULL( t.count ,0) + 1
--               ^^^^^^^         ^^^
 WHERE t.long_val = '...'  

Если текущее значение count равно NULL, мы присвоим ему значение 1.


Обратите внимание, что большинство выражений, содержащих значение NULL, будут оцениваться как NULL. Мы можем обрабатывать значения NULL с помощью условного теста IS NULL, функции IFNULL (), функции COALESCE, соответствующей стандартам ANSI, и др.

Другие вопросы по теме