2010-06-22 16 views
5

Ho cercato la documentazione MySql e non ho trovato nulla. Ho provato questo ... il Rollback non sembra annullare gli inserti realizzati in tabella1 e tabella2MySql può eseguire il rollback di una transazione sql su più tabelle?

Start Transaction; 

INSERT INTO Table1(field1,field2) VALUES (value1, value2); 

INSERT INTO Table2(field3,field4) VALUES (value3, value4); 

INSERT INTO Table3(field5,field6) VALUES (value5, value6); 

Rollback; 

UPDATE: Grazie per tutte le risposte, ma ho dimenticato di dire che il 3 ° dichiarazione genera eccezione (violazione di vincoli).

+1

Stai utilizzando un motore transazionale per tutte queste tabelle? – Paolo

+0

Sì .. Motore InnoDB –

risposta

1

A partire dalla versione corrente di MySql v5.1 ... non supporta il rollback su più tabelle ... Ciò potrebbe cambiare (spero) nel prossimo futuro!

+1

Mi chiedo se questo è cambiato con la v5.6? –

2

Prova ad aggiungere questo all'inizio del vostro script:

SET autocommit=0; 

Per impostazione predefinita, MySQL emetterà un commit dopo ogni istruzione, a meno che non gli si dice il contrario.

+0

Ho provato questo ... non funziona se è stato gettato un errore nel mezzo dello script. –

+0

Non è una buona idea, perché se si eliminano erroneamente i record, non sarà possibile eseguire il rollback della transazione. –

+0

avvia il set di transazioni automaticamente autocommit off. –

8

Sì, ma solo per le tabelle che supportano le transazioni. Per verificare se le tabelle sono compatibili, fare questo

SELECT table_name 
    , engine 
    FROM information_schema.tables t 
WHERE t.table_name IN('Table1','Table2','Table3'); 

Se uno qualsiasi di loro sono MyISAM, non sono operazione compatibile. Avrete bisogno di tutti loro cambiare InnoDB

ALTER TABLE [TableName] ENGINE=InnoDB; 

Ma attenzione - MyISAM supporta alcune funzionalità che InnoDB non, come ad esempio le ricerche testo completo.

Problemi correlati