У меня проблемы с MySQL TRIGGER.
У меня есть таблица сотрудников с некоторой базовой информацией. Затем у меня есть ВИД, который мы называем нашей финансовой_системой. В представлении Finance_system содержится много информации из многих источников. Несколько столбцов в Finance_system связаны с внутренним розыгрышем продаж и возвращают случайные значения из других таблиц каждый раз, когда запрашивается представление Finance_system. Наконец, у меня есть таблица под названием EP1. Его работа состоит в том, чтобы хранить некоторые данные из финансовой_системы, особенно некоторые столбцы со случайными значениями. Это удерживает их от ОБНОВЛЕНИЯ/изменения при каждом запросе. Таблица EP1 обновляется с помощью ТРИГГЕРА, который срабатывает ПОСЛЕ ОБНОВЛЕНИЯ для определенных столбцов в таблице сотрудников. Триггер работает, и таблица EP1 обновляется, но обновляется вся таблица, а не строки, связанные с обновленным employee_id.
Я прочитал политику Stacks перед публикацией и понял, что необходим воспроизводимый пример, поэтому я создал Fiddle, но запутал данные и включил только несколько столбцов. Надеюсь, этого достаточно, так как я измотал Google, пытаясь понять, почему он не работает.
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=942dbabba180df86b7ac9317bbcdd64b
Изменить:
Простая версия: при обновлении Table1.status триггер должен обновить Table3.rand1 значениями из Table2.rand1, где совпадают идентификаторы. Каждый идентификатор имеет две строки в Table2 и Table3. Моя текущая проблема заключается в том, что при срабатывании триггера он обновляет все строки в таблице 3, и я хочу, чтобы он обновлял только строки, связанные с идентификатором, который был обновлен в таблице 1. Соединение не будет работать в этом сценарии, так как Table2 на самом деле является VIEW, использующим rand() в моих реальных данных.
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=329e2dd3bf2fff39afc5388721c53ddc
Эми
могу я увидеть ваш код???
@bigtheo, код в скрипке не помог?
Не могли бы вы свести эту проблему к базовому примеру (например, в вашем случае представление Finance_system не имеет значения), где триггер не работает так, как вы ожидаете? Попробуйте поэкспериментировать с простой таблицей, триггером и желаемым механизмом обновления и опубликуйте весь этот код SQL на скрипке, чтобы получить помощь.
@ Ливиу, спасибо. Я обновил пост более простой версией и новой скрипкой.
A) синтаксис триггера неверен, я получаю ошибки как с MariaDB, так и с MySQL 8.0. Б) У триггера UPDATE нет предложения WHERE. Конечно, он обновит все строки Table3, если вы не поместите их. Не могли бы вы попробовать добавить один, возможно,
WHERE Table3.id = NEW.id
?@ Ливиу, спасибо за помощь. Я исправил синтаксическую ошибку и попробовал ваше предложение предложения where. Он становится ближе, но вы увидите в новой скрипте, что он по-прежнему не будет обновляться по идентификатору, и один идентификатор, похоже, переопределяет другие. Скрипка: dbfiddle.uk/…
У вас осталось 2 ошибки: предложение WHERE в подзапросе неверно, так как оно указывает на Table3 вместо Table2. Тогда вам все еще не хватает предложения WHERE во внешнем запросе, что я уже призывал вас исправить выше.
@ЛивиуЧирку. Я очень ценю всю помощь! После внесения ваших изменений мне просто нужно было добавить сравнение сеансов в предложении where подзапроса, и это сработало отлично. Скрипка: dbfiddle.uk/…
подытожил ответ, поэтому вопрос можно пометить как «решенный».