Я люблю триггеры по одной причине - они просто работают. Я ненавижу триггеры по одной причине - когда они не работают, забудьте про попытку отладки. О сладкое разочарование.
В принципе, я хочу увидеть запрос обновления, удаления, вставки и т.д., который был запущен. Я хочу увидеть этот запрос... где-нибудь, в моем терминале или журнале, точно, как и когда MySQL выполняет его, и, возможно, любые соответствующие выходные/ошибки. Мысли/хаки?
Я пытаюсь отлаживать запрос на обновление с несколькими объединениями, а что нет. Мои запросы намного сложнее, но для краткости здесь приведен пример.
DELIMITER |
CREATE TRIGGER ireallyhateyourightnow AFTER UPDATE ON watch_this_table
FOR EACH ROW BEGIN
IF (OLD.my_value != NEW.my_value) THEN
update
my_table
set
my_column = NEW.my_value;
END IF;
END|
DELIMITER ;
Вот еще один дополнительный контекст, который может повлиять на предложение или ответ. Опять же, меня меньше интересует семантика/синтаксис и больше интересует, как MySQL запускает запрос, но, во что бы то ни стало, я открыт для чего-либо на этом этапе.
- Strace не работает/показывает запрос.
- Не реплицированная среда, но если журналы bin отображают триггерные инструкции, я обязательно установлю это.
- Выполняется ли "show full processlist" выполнение триггера выполнения и/или выполняемые инструкции (я никогда не вижу их после запуска полного списка процессов, так как Perl может запускать его, но я могу просто его не заметить)?
- Общий журнал запросов не отображает эти запросы (конечно, не журнал ошибок).
- Я не использую псевдонимы (больше).
- При создании триггера отсутствуют синтаксические ошибки.
- Оператор IF работает.
- Когда я вставляю НОВЫЕ значения в таблицу "test/temp" и вручную запускаю запрос на обновление, он работает (я даже зашел так далеко, что фактически ввел весь запрос на обновление).
- Я не могу показать вам запрос, но, как я только что упомянул, он работает, когда я запускаю вручную, если это помогает.
- Я удалил все ошибочные символы, вкладки, возврат каретки, новые строки и т.д.
- Я думаю, что сокет MySQL будет показывать только локальное соединение/данные, но не внутреннюю работу MySQL.
- MyISAM, поэтому журналы INNODB не являются опцией
- lsof, похоже, не показывал ничего полезного.
- Я использую MySQL 5.0.77 на CentOS 5.5.