используя 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
Основная проблема заключается в том, что вам не разрешено удалять таблицу в триггере. То, что появляется сообщение об ошибке, когда оно говорит "неявное совершение", не допускается. В таблице выпадающих данных подразумевается неявная фиксация.
Итак, вам нужно выяснить другой способ сделать это, кроме триггера. Одним из способов было бы создать задание cron, которое сравнивает данные в файлах information_schema.tables с таблицей jobq, чтобы искать таблицы в базе данных нуля, которые можно отбросить, а затем удалить их.
Я также должен указать, что способ, которым вы пытаетесь динамически создать оператор таблицы переходов, не будет работать. Это приведет к удалению таблицы с буквальным названием "tblname", а не "scratch.jobname". Если вы хотите динамически отбросить таблицу, вам нужно будет создать оператор drop table на отдельном языке сценариев, например python, perl, shell и т.д.
Удачи!