2010-11-30 2 views
0

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

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

ответ

1

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

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

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

Удачи!

+0

спасибо, я только что сгенерировал событие, которое очищает неиспользуемые таблицы. Я обнаружил, что триггер может быть изящным решением, но не :( – Arman 2010-12-01 06:23:35

Смежные вопросы