Lors de l'insertion d'une nouvelle ligne dans une table T, je voudrais vérifier si la table est supérieure à un certain seuil, et si tel est le cas supprimer le plus ancien (en créant une sorte de FIFO à la fin).Déclencheur MySQL: est-il possible de supprimer des lignes si la table devient trop grande?
Je pensais que je pourrais simplement faire un déclencheur, mais apparemment MySQL ne permet pas la modification de la table sur laquelle nous insérons en fait:
Code: 1442 Msg: Can't update table 'amoreAgentTST01' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Voici le déclencheur j'ai essayé:
Delimiter $$
CREATE TRIGGER test
AFTER INSERT ON amoreAgentTST01
FOR EACH ROW
BEGIN
DECLARE table_size INTEGER;
DECLARE new_row_size INTEGER;
DECLARE threshold INTEGER;
DECLARE max_update_time TIMESTAMP;
SELECT SUM(OCTET_LENGTH(data)) INTO table_size FROM amoreAgentTST01;
SELECT OCTET_LENGTH(NEW.data) INTO new_row_size;
SELECT 500000 INTO threshold;
select max(updatetime) INTO max_update_time from amoreAgentTST01;
IF (table_size+new_row_size) > threshold THEN
DELETE FROM amoreAgentTST01 WHERE max_update_time = updatetime; -- and check if not current
END IF;
END$$
delimiter ;
Avez-vous une idée sur la façon de le faire dans la base de données?
Ou il est clairement quelque chose à faire dans mon programme?