Создание отдельной таблицы для отслеживания определенного столбца с использованием типа данных TIMESTAMP

0

У меня есть таблица 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", но я не хочу этого. Заранее спасибо.

Теги:
database-design

1 ответ

1
Лучший ответ

Вы можете использовать триггер, который будет обновлять 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню