Триггер, который будет хранить только последние N записей - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу сохранить только 5 последних записей в моей таблице.Поэтому я намеревался создать триггер (на MyTable), который после вставки новой записи удалял бы все записи, кроме последних 5.Когда я пытаюсь создать этот триггер:

DELIMITER //
CREATE TRIGGER DeleteOldRecords AFTER INSERT ON MyTable FOR EACH ROW
BEGIN
  DELETE FROM MyTable WHERE id NOT IN
  (SELECT id FROM MyTable ORDER BY id DESC LIMIT 5);
END//

, я получаю следующее сообщение об ошибке: Error Code: 1235. This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'.Я использую MySQL v5.7.14

Если я вложу предложение IN в подзапрос следующим образом:

DELIMITER //
CREATE TRIGGER DeleteOldRecords AFTER INSERT ON MyTable FOR EACH ROW
BEGIN
  DELETE FROM MyTable WHERE id NOT IN
  (SELECT id FROM (SELECT id FROM MyTable ORDER BY id DESC LIMIT 5) x);
END//

Я могу создать такой триггер, но теперь я не могу вставить записи в свою таблицуMyTable.Я получаю следующее сообщение об ошибке: Error Code: 1442. Can't update table 'MyTable' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

В чем может быть решение?(Я не хочу работу cron для удаления старых записей)

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