Autor | Zpráva | ||
---|---|---|---|
vojak.p Profil |
#1 · Zasláno: 29. 10. 2014, 00:43:10
Zdravím, mám následující kus kodu:
DELIMITER $$ create trigger tr_nazev after update on tabulka for each row begin DELETE from tabulka WHERE time < Date_add(now(), INTERVAL -1 DAY); end$$ DELIMITER ; |
||
juriad Profil |
vojak.p:
http://sqlfiddle.com/#!2/83de21 Odkomentuj ten update a dostaneš chybu: Schema Creation Failed: Can't update table 'tabulka' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.: O zacyklení nejde. Řešením může být vytvořit proceduru, kterou budeš data modifikovat. A ta procedura bued volat i ten delete. Mimochodem, proč potřebuješ odmazávat data? Bojíš se, že to databáze neutáhne, nebo je na tom závislá aplikační logika? |
||
vojak.p Profil |
#3 · Zasláno: 29. 10. 2014, 10:29:34
Právě že samotnej UPDATE je funkční, tak proč by měl vadit příkaz DELETE? Snažim se o podobnou databázi jako je RRD. A je pro mě zbytečné uchovávat přesné data starší jak nějaký interval. Navíc to není aplikováno na jednu tabulku, ale několik desítek.
|
||
juriad Profil |
#4 · Zasláno: 29. 10. 2014, 10:50:01
vojak.p:
Tak použij cron a maž ta data jednou denně a nikoli při každé změně. Takto by to stejně jen zbytečně snižovalo výkon. Ten problém je způsobený příkazem, který mění aktuálně zpracovávanou tabulku. Co kdybys zrovna chtěl smazat záznam, který se teprve má updatnout? Jenže u UPDATE není definované pořadí (alespoň myslím), mohl bys tedy dostat náhodně různé výsledky. |
||
Časová prodleva: 9 let
|
0