У меня есть таблица mysql, которая часто меняет два столбца. Один из них "доступен" (в основном 0,1), а другой - "notification_preference". Теперь я хочу создать столбец "updated_at", чтобы отслеживать изменения "доступного" столбца.
Я узнал, что тип TIMESTAMP обновляется автоматически, если столбец соответствующей строки изменяется. Я хочу использовать столбец "updated_at", чтобы отслеживать только "доступный" столбец.
Поэтому возникает вопрос: следует ли создать новую таблицу с "доступным" и "обновленным_at (TIMESTAMP)" или сохранить данные в одной таблице и вручную изменить таблицу "updated_at"? Главная таблица такова:
...........................................
id int
имя varchar
имя пользователя varchar
Пароль varchar
доступный tinyint
updated_at DATETIME
То, что я хочу сделать, это:
Главная таблица
...........................................
id int
имя varchar
имя пользователя varchar
Пароль varchar
доступный tinyint
updated_at DATETIME
Другая таблица для
...........................................
Идентификатор пользователя
доступный tinyint
updated_at TIMESTAMP
какая процедура лучше?
В основной таблице есть другие столбцы, которые могут иногда меняться, поэтому я не могу использовать TIMESTAMP для "updated_at" в главной таблице. Потому что, если другие столбцы этой таблицы будут обновлены, обновится также "updated_at", но я не хочу этого. Заранее спасибо.
Вы можете использовать триггер, который будет обновлять updated_at
столбец только если значение available
было изменено:
create trigger mainTable_before_update before update on mainTable
for each row begin
if new.available <> old.available
then set new.updated_at = now();
end if;
end
Для вставок вы можете использовать DEFAULT CURRENT_TIMESTAMP
в инструкции CREATE:
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
Как вы увидите в демо, столбец не обновляется при смене пароля. Но он обновляется, когда мы меняем available
.