MySQL: триггер ОБНОВЛЕНИЕ. Получить значение столбца, используемого в предложении UPDATE, если он не соответствует ни одной строке? - PullRequest
1 голос
/ 23 мая 2011

MySQL: могу ли я получить в теле триггера обновления значение столбца, указанного в предложении where запускающего запроса, если предложение wher e вообще не соответствует ни одной строке?

Я должен сделать следующее, но НЕ ИСПОЛЬЗУЯ прямой запрос, такой как ON DUPLICATE KEY UPDATE, и так далее:

Если у меня есть:

UPDATE my_table SET idiotism_level=5 WHERE name='Pencho'

... и совпадение предложения whereНЕТ СТРОК, я бы хотел автоматически инициировать вставку строки, имеющей name='Pencho' перед обновлением, и тогда UPDATE предположительно совпадет и будет работать правильно.

Возможно ли это?

Ответы [ 3 ]

1 голос
/ 23 мая 2011

Это может быть сделано в RULE в других системах баз данных (PostgreSQL), которого нет в MySQL. Это правило, а не триггер, поскольку вы должны анализировать запрос, а не результат запроса.

Но для MySQL вы можете выполнять предварительные задания, используя MySQL-Proxy . Вы должны быть в состоянии изменить свой запрос на обновление и создать вставку. Запустив какой-то дополнительный запрос «Проверка строки существует» из MySQL-Proxy (я не говорю, что это хорошее решение, но если у вас нет способа сделать код, чтобы действовать лучше, вы можете исправить это на этом уровне).

1 голос
/ 23 мая 2011

Если имя имеет уникальный индекс, вы можете использовать REPLACE

REPLACE INTO my_table (idiotism,name) VALUES ( 5,'Pencho');
1 голос
/ 23 мая 2011

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

...