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

Transazioni Rails

Se hai un mix di codice che richiede transazioni esplicite e codice che può fare affidamento su autocommit, forse non dovresti disabilitare autocommit per tutte le connessioni. Sei sulla strada giusta chiedendoti se questo avrà un impatto su altro codice. Se disabiliti l'autocommit, ma l'altro codice non sa che deve impegnarsi per eseguire il commit del suo lavoro, allora sarà un problema. Il lavoro non impegnato viene annullato alla chiusura della connessione.

Tieni presente che il motore di archiviazione predefinito per MySQL è Il mio ISAM , che non supporta affatto le transazioni. Quando apporti modifiche a una tabella che utilizza MyISAM, le modifiche vengono effettivamente salvate immediatamente, indipendentemente dalle tue richieste esplicite di iniziare e terminare le transazioni e indipendentemente dallo stato di autocommit. Quindi non sarai in grado di tornare indietro, non importa cosa, a meno che tu non abbia creato le tue tabelle utilizzando InnoDB motore di archiviazione (o altri motori di archiviazione sicuri per le transazioni come BDB ).

È non necessario per disabilitare la modalità di commit automatico per utilizzare le transazioni in MySQL. Avviare semplicemente una transazione in modo esplicito. Le seguenti istruzioni SQL faranno parte di una transazione fino a quando non esegui il commit o il rollback di tale transazione, indipendentemente dal valore di autocommit sulla tua connessione corrente.

http://dev.mysql.com/doc/refman/5.0 /it/commit.html dice: