2015-07-05 3 views
0

У меня есть столбец Quantity в таблице Inventory MySQL, который обновляется из нескольких источников. Мне нужно было сохранить дорожку в таблице в другом столбце под названием QuantityLog в последнее обновленное время Quantity и источник, который сделал это. Что-то подобное должно быть содержание QuantityLog колонки (типа Text) (только последние детали обновления требуется):Источник и время обновления столбца в MySQL

<Log> 
    <UpdateTime>2015-02-23 12:00:01 PM</UpdateTime> 
    <Source> Feeder application</Source> 
</Log> 

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

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

+0

Если вы храните метку времени в той же таблице, вы можете добавить столбец с предложением ON ONDATE CURRENT_TIMESTAMP', которое будет автоматически обновляться при каждом обновлении строки. Вам не понадобится триггер, и вам также не потребуются изменения каких-либо приложений (если ваше приложение не использует 'select *' и не работает в дополнительном поле, но это было бы неплохо исправить в любом случае). См. [Инициализация временной метки] (https://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html). – GolezTrol

ответ

1

Невозможно, чтобы MySql мог знать «приложение фидера», если только нет переменной или таблицы, заполненной этим значением. Если у вас есть это, легко создать триггер, который обновляет эту информацию в таблице Inventory при каждом изменении поля Quantity.

Однако, если ваши приложения используют уникальных пользователей mysql для подключения к базе данных, вы можете, конечно, использовать встроенную функцию CURRENT_USER() внутри вашего TRIGGER. Альтернативно, CONNECTION_ID() может оказаться полезным при отслеживании того, кто что сделал. Например, вы можете создать новую таблицу, которая регистрирует идентификатор соединения вашего приложения. В этой таблице вы можете написать имя приложения, PID и другие материалы. Конечно, это означало бы немного изменить наше приложение, добавив соответствующий оператор insert после установления соединения. Накладные расходы должны быть небольшими, поскольку обычно соединения хранятся в пулах и не воссоздаются все время.

Смежные вопросы