|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
[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??
![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Sep 2005
Messaggi: 1400
|
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 |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
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?
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2005
Messaggi: 1400
|
in quel caso lo puoi fare tramite trigger, utilizzando una condizione AFTER INSERT
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jul 2005
Messaggi: 156
|
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 ![]()
__________________
Corsair r300 | Be Quiet 630W 80+ | Asrock Extreme 6 | i5 3570k@4.2 | Artic cooling Freezer 13 | 2x4GB Corsair low profile | SSD M4 128 GB | SSD EVO 256GB | Sapphire nitro 390X |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Jul 2005
Messaggi: 156
|
Codice:
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; Spero ti sia utile ciao ![]()
__________________
Corsair r300 | Be Quiet 630W 80+ | Asrock Extreme 6 | i5 3570k@4.2 | Artic cooling Freezer 13 | 2x4GB Corsair low profile | SSD M4 128 GB | SSD EVO 256GB | Sapphire nitro 390X |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
grazie ancora Broadband
|
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
mi sapete dire dove sbaglio in questo trigger? sto usando phpmyadmin per il mio db mysql
Codice:
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; #1064 - Errore di sintassi nella query SQL vicino a 'DECLARE vis NUMBER; BEGIN SELECT COUNT(*) INTO vis FROM visita WHERE effettuat' linea 3 |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
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:
Codice:
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. ![]() |
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
up
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:39.