Требуется помощь по MySQl Trigger - PullRequest
0 голосов
/ 30 ноября 2010

с использованием MySQL 5.1.36, я пытаюсь записать триггер, который сбрасывает чистые таблицы из «чистой» базы данных.

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.

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

Заранее спасибо
Арман

1 Ответ

1 голос
/ 30 ноября 2010

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

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

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

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...