Обновить временную метку MySQL при условии

121
11

У меня есть таблица mysql "ping_status"

CREATE TABLE 'ping_status' (
'id' int(11) NOT NULL,
'ping_status' tinyint(4) DEFAULT '0',
'change_status' tinyint(4) DEFAULT '0',
'ts' timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY ('id')
)

column ts = time когда ping_status изменяется

Как я могу обновить столбцы ts когда изменяется только ping_status. Не должно быть изменений в ts если изменяется change_status;

спросил(а) 2021-01-19T13:25:56+03:00 9 месяцев назад
1
Решение
103

В документах "если столбец автоматически обновляется, он автоматически обновляется до текущей метки времени, когда значение любого другого столбца в строке изменяется от текущего значения". Это означает, что при обновлении ping_status или change_status ts будет установлен на current_timestamp. Итак, удалите ON UPDATE CURRENT_TIMESTAMP и явно обновите ts, когда вы обновите ping_status.

update ping_status set ping_status=some_value, ts=now() where id=some_value;

Поскольку у вас все еще есть DEFAULT CURRENT_TIMESTAMP любые новые значения, которые вы вставляете, по-прежнему будут получать текущую временную метку.

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

ответил(а) 2021-01-19T13:25:56+03:00 9 месяцев назад
46

Использовать Trigger


CREATE  TRIGGER  myTrigger AFTER UPDATE ON myTable
FOR EACH ROW
BEGIN
if NEW.ping_status<> OLD.ping_status Then

--Update ts here

end If

if NEW.change_status<> OLD.change_statusThen

update table1 set ts=old.ts where id=new.id

end If
END

ответил(а) 2021-01-19T13:25:56+03:00 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема