2014-01-21 7 views
0

сбоя вращения я должен ограничить запись таблицы 25. после того как я просто удалить все (в будущем будет изменить его, чтобы удалить только старые строки)MySQL хранимые процедуры

DELIMITER // 
CREATE PROCEDURE p1() delete FROM tests;// 

CREATE TRIGGER trigger1 
BEFORE INSERT 
ON tests 
FOR EACH ROW 
BEGIN 
    SELECT COUNT(*) INTO @cnt FROM tests; 
    IF @cnt >= 25 THEN 
    CALL p1(); 
    END IF; 
END 
// 

DELIMITER ; 

, но я получаю сообщение об ошибке: Может 't update table' tests 'в хранимой функции/триггере, потому что он уже используется оператором, который вызвал эту сохраненную функцию/триггер

Поэтому я не могу добавить больше полей.

+1

Конечно, мы можем, вместе, подумать о чуть более описательном названии – Coffee

+0

fixed ........... – Prostitutor

ответ

1

Часто задаваемые вопросы по запуску MySQL: вы не можете изменить таблицу, вызывающую триггер.

Но вы можете настроить задание cron, или CREATE EVENT в MySQL, которое регулярно очищает таблицу. (CREATE EVENT требует привилегии PROCESS и запущенного event_scheduler. По умолчанию event_scheduler отключен: он может быть включен с консоли SQL, но конфигурация MySQL должна быть изменена, чтобы гарантировать, что она начнется с перезагрузки MySQL.)

0

Кажется, что вы не можете обновить или удалить из той же таблицы, которая вызывала триггер.
Но вы можете обойти это, создав другую таблицу, например tests2, и вместо того, чтобы вставлять в tests, просто вставьте в tests2 и введите триггер значения NEW. в тесты, после чего вы можете рассчитывать на тесты и удалять из таких тестов, как ты хочешь это.
см. Это sqlFiddle
Проблема с этим тогда tests2 пополняется вставными данными. Возможно, вам придется вручную удалить из test2.

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