Требуется помощь по MySQl Trigger

0

используя MySQL 5.1.36, я пытаюсь записать триггер, который сбрасывает таблицы с нуля из базы данных "scratch".

CREATE DEFINER=`root`@`localhost` TRIGGER 
`jobq`.`DropScratch` 
BEFORE DELETE ON jobq.jobq FOR EACH ROW
BEGIN
 DECLARE tblname VARCHAR(128);
 set tblname=concat('scratch.',OLD.jobname);
 DROP TABLE IF EXISTS tblname;
END;

Я всегда получаю сообщение об ошибке:

Explicit or implicit commit is not allowed in stored function or trigger.

Можно ли каким-то образом преодолеть это ограничение?

Спасибо заблаговременно
Arman

Теги:
triggers

1 ответ

1
Лучший ответ

Основная проблема заключается в том, что вам не разрешено удалять таблицу в триггере. То, что появляется сообщение об ошибке, когда оно говорит "неявное совершение", не допускается. В таблице выпадающих данных подразумевается неявная фиксация.

Итак, вам нужно выяснить другой способ сделать это, кроме триггера. Одним из способов было бы создать задание cron, которое сравнивает данные в файлах information_schema.tables с таблицей jobq, чтобы искать таблицы в базе данных нуля, которые можно отбросить, а затем удалить их.

Я также должен указать, что способ, которым вы пытаетесь динамически создать оператор таблицы переходов, не будет работать. Это приведет к удалению таблицы с буквальным названием "tblname", а не "scratch.jobname". Если вы хотите динамически отбросить таблицу, вам нужно будет создать оператор drop table на отдельном языке сценариев, например python, perl, shell и т.д.

Удачи!

  • 0
    спасибо! Я только что сгенерировал событие, которое очищает неиспользуемые таблицы. Я нашел триггер может быть элегантным решением, но не :(

Ещё вопросы

Сообщество Overcoder
Наверх
Меню