View Full Version : [MYSQL] Trigger che elimina ogni riga dopo x giorni
Ho da poco imparato ad usare i trigger, e vorrei eliminare in modo automatico (tipo ogni 30 giorni) tuple di tabelle che contengono delle colonne con una data...quindi cancellare date vecchie di almeno 30 giorni....mi aiutate a crearlo??:mc:
SerMagnus
09-01-2010, 10:42
quello che chiedi non è possibile, i trigger si attivano solo su determinati eventi su di una tabella.
puoi risolvere tramite cron lanciando una query o una storedprocedure
ok la questione del tempo non è fondamentale, principalmente devo svuotare ogni tanto la tabella....se la condizione fosse che la tabella ha raggiunto una dimensione di tuple >=30?
SerMagnus
09-01-2010, 14:49
in quel caso lo puoi fare tramite trigger, utilizzando una condizione AFTER INSERT
Broadband
09-01-2010, 16:08
Ciao ho fatto esattamente la stessa cosa 1 mesetto... come ti hanno risposto usa AFTER INSERT.
SE non hai urgenza quando lunedi' sono a lavoro ti posto il codice.
Ciao :D
Ciao ho fatto esattamente la stessa cosa 1 mesetto... come ti hanno risposto usa AFTER INSERT.
SE non hai urgenza quando lunedi' sono a lavoro ti posto il codice.
Ciao :D
Scusa se ti rispondo solo ora...se me lo posti mi fai un favore, grazie!:)
Broadband
19-01-2010, 10:34
create or replace TRIGGER
logtrigger
BEFORE INSERT ON TABLE
DECLARE
x number;
BEGIN
select count(*) into x from table where logtype='info';
if (x>2000) THEN
delete from table where date in ( select date from (select date from table where logtype='info' order by logdate asc) where rownum<=1000);
end if;
END;
Ciao questo script elimina 1k tuple (le piu' vecchie in ordine cronologico) dalla tabella TABLE quando TABLE supera 2k entry.
Spero ti sia utile ciao :D
mi sapete dire dove sbaglio in questo trigger? sto usando phpmyadmin per il mio db mysql
CREATE TRIGGER svuota_visita
AFTER INSERT ON visita
DECLARE vis NUMBER;
BEGIN
SELECT COUNT(*) INTO vis FROM visita WHERE effettuata='1';
IF vis >= 4 THEN
DELETE FROM visita WHERE effettuata='1' AND data_visita=max(data_visita);
END IF;
END;
la sintassi mi sembra giusta,ma da quest'errore:
#1064 - Errore di sintassi nella query SQL vicino a 'DECLARE vis NUMBER; BEGIN SELECT COUNT(*) INTO vis FROM visita WHERE effettuat' linea 3
sono riuscito ad inserire il trigger, solo che ora durante l'esecuzione del programma, se arrivo al fatidico numero in cui entro nell'if del trigger mi da:
java.sql.SQLException: Can't update table 'visita' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
probabilmente perchè l'azione che deve svolgere il trigger è sulla tabella che lancia il trigger stesso....capisco che è una cosa un po avanzata, ma qualcuno può aiutarmi???:mc:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.