Interrogazione database MySQL
Ciao a tutti,
ho una domanda da porvi:
devo eseguire 2 query su un database (su 2 tabelle diverse).
Devo pero' farlo in modo che se una delle 2 query fallisce alora vengano annullati in automatico pure gli effetti della query precedente. come si fa? c'è un modo automatico? o devo farlo a mano?
grazie a tutti
ho una domanda da porvi:
devo eseguire 2 query su un database (su 2 tabelle diverse).
Devo pero' farlo in modo che se una delle 2 query fallisce alora vengano annullati in automatico pure gli effetti della query precedente. come si fa? c'è un modo automatico? o devo farlo a mano?
grazie a tutti
Risposte
Non è molto chiara la questione... Che intendi per annullare l'effetto delle query? Sono degli aggiornamenti (insert/update/delete) delle due tabelle? O cosa?
Scusami! Mi spiego meglio:
immaginiamo di avere 2 tabelle:
[/list:u:3ntozhp0]
Immaginiamo che voglio inserire nella tabella con una Insert:
e nella tabella MESTIERE vado ad inserire tutti i mestieri dove viene impiegato un martello, quindi nella tabella
Il mio problema è questo: supponiamo che inserisco la prima query: cioè il martello nella propria tabella, passo d inserire il mestiere (o i mestieri) che encessitano del martello nella tabella MESTIERI ma ad un certo punto la transazione fallisce. Io vorrei poter annullare anche l'effetto della transazione precedente andata a buon fine, evitando così di avere inseritro il martello tra gli attrezzi ma non aver alcun mestiere che ne faccia uso.
Spero di essere stato piu' chiaro
Spero di ricordarmi bene ma qualcuno mi aveva parlato o forse ne ho sentito parlare di sfuggita da gualcuno apropposito di:
immaginiamo di avere 2 tabelle:
ATTREZZO (id_attrezzo, nome, ....) MANSIONE (id_mansione, id_attrezzo, ...)
[/list:u:3ntozhp0]
Immaginiamo che voglio inserire nella tabella con una Insert:
ATTREZZO: "00001, martello, ..."
e nella tabella MESTIERE vado ad inserire tutti i mestieri dove viene impiegato un martello, quindi nella tabella
MESTIERE inserisco una qualcosa come: "falegname, martello, ...."
Il mio problema è questo: supponiamo che inserisco la prima query: cioè il martello nella propria tabella, passo d inserire il mestiere (o i mestieri) che encessitano del martello nella tabella MESTIERI ma ad un certo punto la transazione fallisce. Io vorrei poter annullare anche l'effetto della transazione precedente andata a buon fine, evitando così di avere inseritro il martello tra gli attrezzi ma non aver alcun mestiere che ne faccia uso.
Spero di essere stato piu' chiaro

Spero di ricordarmi bene ma qualcuno mi aveva parlato o forse ne ho sentito parlare di sfuggita da gualcuno apropposito di:
start transaction end transaction
Si infatti gestisci il tutto con le transazioni. Nello specifico non conosco MySQL, ma sicuramente ci sono le istruzioni per attivare la gestione delle transazioni: begin o start, commit e rollback; se qualcosa va storto fai la rollback altrimenti fai la commit. Per la verifica della correttezza dell'aggiornamento delle tabelle penso ci sia la possibilità di controllare un return code, così da permetterti di eseguire o meno la commit/rollback della transazione.