sql:
DELETE FROM tabulka WHERE chcismazat=1
Tak a jak ted zjistim idcka radku ktery byli smazany?
idcka sou primary_key a maj auto_increment.
Neco podobnyho dela funkce "mysql_insert_id". Ta vraci idcka u insertu.
Potreboval bych neco jako "mysql_deleted_id".
Zatim sem to vyresil tim ze nejdriv udelam select idcek kde chcismazat=1 a pak ty idcka projedu cyklem a vsechny je smazu ale presto na tohle musi bejt nejaka fce nebo je to docela chyba ze jeste neexistuje.
Na co potřebuješ ID smazaného řádku?
chápal bych to možná v triggeru, kde chceš id mazaného řádku, ale to obvykle bývá vyřešené. Nevím jak je to v MySQL, znám to odjinud.
Nic méně, k čemu potřebuješ ID smazaného řádku? Opravdu mi to není jasné.
Do logu. Opravuju jednu tabulku ktera ma cca 100.000 radku a jestli neco po*u tak me vyhodej z prace pac tam sou dost dulezity osobni udaje. Takze v pripade ze se neco pokazi nahraju prislusnej radek ze zalohy.
:-)
myslim že funkce na to neni. nevim jestli je nějak možnýd dělat automaticky log změn v dfatabázi. já bych tohle dělal tak, že bych z toho selectu zjistil ty id těch článků, a pak je smazal všechny najednou tim prikazem cos napsal jako prvni.
Aha ... tak do práce. Hmm... by mě zajímalo kde děláš ;)
V lepších firmách se to dost úspěšně řeší paralelními databázemi a jejich porovnáváním.
paralelní db jsou náročné. Jednodušší je udělat to buď tak, že to napřed zapíšeš do logu a pak smažeš, jak psal RUR, nebo se tvoří auditní tabulky, kam se data strčí a pak se z původní tabulky smažou. A to buď storkou nebo triggerem, vyjde to nastejno, je to na tom, jak se to komu líbí.
MzM: nebudeme zakládat další falme, ale jenom pro tvou informaci: já dělám s paralerními databázemi (jedna přímo na HTTP serveru, druhá samostaně) a nějak nevidím, že by byla náročná. Velikostně se pohybuju v řádech GB a v milónech řádků a ještě se mi nikdy nestalo, že bych jakkoliv přišel o jediný řádek (zezačátku byly problémy se softwarem, a zabezpečením, potom párkrát odešel ten či onen disk ale zatím mám všechno). Záleží na šikovnosti ;)
Jo sorry, špatně jsem se vyjádřil s paralerními SQL servery.
Nechci vam brat iluze, ale ve firmach se na nejakej par smazanejch radku kasle. Obcas se proste neco pokazi, omluvi se uzivatelum a zivot de dal :-D
(jednou sem omylem odeslal 200 uzivatum nesmyslnej email :))) )
Aspon takhle to chodi v mensich firmach. V tomhle pripade internetovej obchod (nejvetsi tabulka ma jen 350.000 radku).
Jinak ten script co sem potreboval sem uz napsal, pouzil a smazal. Vyresil sem to selectem kterej vybral idcka ktery se smazou, ulozil je a pak byl jeden velikej DELETE FROM tabulka WHERE ID IN(...)
Ale stejne me nastvali ze takova funkce neexistuje...
Tom a ostatní, omlouvám se za dezinformaci, měl jsem napsat, že se mi zdají být paralelní db náročné. Nemyslím, že by to bylo pomalé, ale musí pořizovat další stroj/licence a pod.... Ale, pravda, zkušenosti s tím nemám.
Kriss, pamatuju si na firebird, kde se v triggeru dalo napsat
select * from deleted, kde deleted představovalo dataset ze smazaných řádků tabulky u které byl ten trigger. Koukám v mssql je to to samé.