Mysql
 sql >> Database >  >> RDS >> Mysql

Transazione MySQL:commit e rollback

1) Tutte le modifiche apportate sono visibili all'interno della stessa transazione. Se lo fai

START TRANSACTION;
INSERT INTO MyTable VALUES ('Hi there');
SELECT * FROM MyTable;

il tuo output includerà "Ciao". Ma se avvii una seconda connessione al database, la nuova riga non verrà visualizzata finché non esegui il commit della transazione dall'interno della prima connessione. Prova a giocarci usando due connessioni al database usando la riga di comando.

Non vedi l'effetto nel tuo sito web perché non puoi avere la stessa transazione all'interno di due connessioni al database (verrà effettuata una nuova connessione db all'inizio della tua richiesta).

2) Verrà eseguito il rollback di tutte le transazioni non vincolate alla chiusura della connessione con il database. Quindi, se queste sono le tue uniche due domande, non ci sono differenze. Tuttavia c'è una differenza tra

START TRANSACTION;
INSERT INTO MyTable VALUES ('This one would be discarded on rollback');
ROLLBACK;
INSERT INTO MyTable VALUES ('This one will be permanent because not within transaction');  

3) Sì, sono tutti uguali.