R: [Db] mysql spostare record tra due tabelle
Domenico L.
domenico.lorusso a pleiade.it
Gio 14 Giu 2007 09:03:53 CEST
giuseppe a arsnet.it ha scritto:
> Cristiano Verondini wrote:
>
>
>> Purtroppo, AFAIK, questo è l'unico metodo. Aggiungerei un LOCK delle
>> tabelle prima delle operazioni per evitare che mentre stai facendo la copia
>> vengano inseriti altri record. Se non ci sono errori, la procedura non ha
>> problemi. Se ci sono errori sarebbe meglio avere un motore DB col rollback.
>>
>
> Ho trovato una mezza soluzione:
>
> “INSERT INTO storico_ordini (ordine_id,data,id_anacf,numero)
> SELECT ordine_id,data,id_anacf,numero
> FROM ordini”
> "delete from ordini where ordine_id in (select ordine_id from storico
> _ordini) "
>
Non ho le specifiche di mysql ma temo ch questa soluzione alla lunga ti
darà problemi perché la delete non rimuove lo spazio occupato mentre la
truncate sì.
La prima soluzione da te proposta è quella corretta, non ci possono
essere errori in una insert....select
è un'istruzione atomica e come tale o va tutta a buon fine o non ci va.
I punti su cui devi prestare attenzione sono:
- Mettere in transazione
- Lock di tabella per evitare inserimenti nel mentre stai storicizzando
i dati
- Eventuli trigger sulla tabella di storico.
Se poi vuoi (in pseudo codice):
lock
begin transaction
select .... insert
select p.id
from produzione p left join storico s on (p.id=s.id)
where s.id is null
#se questa query torna qualcosa hai avuto un problema!
end transaction
truncate produzione
unlock
ciao
--
Domenico L. icq: 645 44 861 - msn: strahd a jumpy.it
per stupire mezz'ora basta un libro di storia,
io cercai di imparare la Treccani a memoria... [F.d.A.]
Maggiori informazioni sulla lista
Db