Подтвердить что ты не робот

Могу ли я запустить триггер на операторе select в mysql?

Я пытаюсь выполнить INSERT для таблицы X каждый раз, когда я SELECT какую-либо запись из таблицы Y, есть ли способ выполнить это только с помощью MySQL?

Что-то вроде триггеров?

4b9b3361

Ответ 1

Короткий ответ - Нет. Триггеры запускаются с помощью INSERT, UPDATE или DELETE.

Возможное решение для этого. довольно редкий сценарий:

  • Сначала напишите несколько хранимых процедур которые делают SELECT вы хотите на таблица X.
  • Затем ограничьте всех пользователей, чтобы использовать только эти хранимые процедуры и не позволяют им непосредственно использовать SELECT на столе X.
  • Затем измените хранимые процедуры на также вызвать хранимую процедуру, которая выполняет действие, которое вы хотите (INSERT или что-то еще).

Ответ 2

Нет - вы не можете запускать на SELECT - вам нужно будет создать хранимую процедуру (или любой другой тип средства ведения журнала - например, файл журнала или что-либо еще), который вы неявно вызываете в любом запросе - проще, если вы создаете оболочку, которая вызывает ваш запрос, вызывает результаты ведения журнала и возвращает результаты.

Ответ 3

Если вы пытаетесь использовать таблицу X для регистрации порядка запросов SELECT в таблице Y (довольно обычная настройка регистрации запросов), вы можете просто отменить порядок операций и сначала запустить запрос INSERT, а затем запустить запрос SELECT.

Таким образом, вам не нужно беспокоиться о связывании двух операторов с TRIGGER: если ваш сервер выходит из строя между двумя операторами, вы уже регистрировали, что вам нужно, с вашим первым оператором и выполняете ли запрос SELECT или не выполняете влияние на базовую базу данных.

Если вы не регистрируете запросы, возможно, вы пытаетесь использовать таблицу Y в качестве очереди задач - ситуация, с которой я боролся, что привело меня к этой теме, - и вы хотите, чтобы какие-либо запросы сессии Y сначала блокировали все остальные сеансы из возвращаемых строк, чтобы вы могли выполнить некоторые операции с результатами и вставить вывод в таблицу X. В этом случае просто добавьте некоторые возможности ведения журнала в таблицу Y.

Например, вы можете добавить столбец "владелец" в Y, затем WHERE часть WHERE вашего запроса SELECT к UPDATE, запустить ее, а затем изменить запрос SELECT чтобы отображать только те результаты, которые были заявлены вашим UPDATE:

UPDATE Y SET owner = 'me' WHERE task = 'new' AND owner IS NULL;
SELECT foo FROM Y WHERE task = 'new' AND owner = 'me';

... сделайте некоторую работу над foo, затем...

INSERT INTO X (output) VALUES ('awesomeness');

Опять же, ключ должен сначала регистрироваться, а затем запрашивать.