ON UPDATE CURRENT_TIMESTAMP не работает при обновлении с идентичной информацией

У меня в таблице есть такой столбец:

date_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

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

Например, моя таблица (пользователи) такая:

+----+-------+----------------+-----------+-------------+
| id | name  | food           | confirmed | signup_date |
+----+-------+----------------+-----------+-------------+
|  1 | John  | Casserole      | Y         | 2012-04-11 12:46:55  |
|  2 | Sandy | Key Lime Tarts | N         | 2012-04-14 11:02:02  |
+----+-------+----------------+-----------+-------------+

Когда я запускаю этот запрос, все работает нормально (signup_date обновляется, как и ожидалось):

UPDATE users SET name = 'new', food = 'new' where id = 1;

Однако, когда я запускаю это (вставляя точную информацию), signup_date остается таким же, как и предыдущий:

UPDATE users SET name = 'John', food = 'Casserole' where id = 1;

Мне нужна помощь с обновлением signup_date независимо от того, совпадает ли информация или нет. Кто может помочь?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
3
0
2 608
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

UPDATE users SET name = 'new', food = 'new',signup_date = Now() where id = 1;

Может быть, вы могли бы попробовать обновить столбец с помощью Now ()?

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

tera_789 23.08.2018 05:16

Просто хотел добавить, если вы действительно действительно хотите сделать это без добавления этого обновления одного столбца. посмотрите на triggers.

Ryan Tan 23.08.2018 05:35

Да спасибо. Решил пойти с column = current_timestamp

tera_789 23.08.2018 07:08
Ответ принят как подходящий
  1. Автоматически обновляемый столбец автоматически обновляется до текущего отметка времени, когда значение любого другого столбца в строке изменяется от его текущего значения. Автоматически обновляемый столбец остается неизменным, если все остальные столбцы устанавливаются на свои текущие значения.

Прочитать документация

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

запрос обновления MYSQL должен быть следующим

ALTER TABLE  users   
CHANGE COLUMN `signup_date` `signup_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ;

но я предлагаю сохранить поле времени обновления в другом поле, например, «modified_date», чтобы вы могли отслеживать как дату регистрации, так и дату последнего изменения

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

Walf 12.05.2021 09:07

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