Можно ли создать триггер select на mysql? [Дубликат]

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

Вы можете сделать это, используя IN, попробуйте это:

SELECT * 
FROM t1 WHERE (id,rev) IN 
( SELECT id, MAX(rev)
  FROM t1
  GROUP BY id
)

, на мой взгляд, это меньше сложный ... легче читать и поддерживать.

17
задан Ahmad A Bazadgha 26 May 2011 в 12:45
поделиться

3 ответа

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

Возможное решение для этого (странного) senario:

  • Во-первых, напишите некоторые хранимые процедуры, которые делают SELECT, которые вы хотите в таблице X.
  • Затем запретите всем пользователям использовать только эти хранимые процедуры и не разрешать им использовать SELECT в таблице X .
  • Затем измените хранимые процедуры, чтобы также вызвать хранимую процедуру, которая выполняет требуемое действие (INSERT или что-то еще).
20
ответ дан ypercubeᵀᴹ 5 September 2018 в 11:43
поделиться

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

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

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

Например, вы можете добавить столбец «владелец» в Y, а затем привязать часть 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');

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

0
ответ дан David Townes 5 September 2018 в 11:43
поделиться

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

4
ответ дан Ian Wood 5 September 2018 в 11:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: