2013-07-25 11 views
8

Ho una query MySQL in una tabella InnoDB come questa:Transazione necessaria per una singola query di aggiornamento?

UPDATE items SET qty = qty + 5 WHERE item_id = 1234 LIMIT 1; 

ho bisogno di usare una transazione per questo? Potrebbe accadere qualcosa di indesiderabile se non si utilizza una transazione?

+0

No, non è necessaria una transazione per questo. http://stackoverflow.com/questions/1171749/what-does-a-transaction-around-a-single-statement-do?answertab=votes#tab-top –

risposta

8

Niente di grave può accadere. Per impostazione predefinita, MySQL esegue il wrapping di tutti i singoli comandi di aggiornamento/inserimento/cancellazione in una transazione. Se qualcosa va storto nell'aggiornamento, la transazione dovrebbe essere ripristinata correttamente.

Le transazioni sono davvero necessarie solo quando si combinano più modifiche e si desidera che tutte abbiano effetto "allo stesso tempo" o "non del tutto".

Ulteriori informazioni a riguardo sono disponibili nello documentation.

+0

Questo è quello che pensavo volesse essere sicuro grazie. –

+2

@Gordon, qual è il livello di isolamento per questa transazione predefinita? Se dovessimo aggiornare 't set c = c + 1' avremo un aggiornamento perso se 10k utenti eseguono quell'istruzione contemporaneamente? – Pacerier

+0

@Gordon La documentazione a cui hai fornito un collegamento non menziona che MySQL racchiude tutti i singoli comandi in una transazione, quindi da dove hai preso quelle informazioni? – Scadge

Problemi correlati