2010-02-03 15 views

risposta

9

No, non è possibile eseguire più inserimenti in due tabelle in una query.

2

Forse in una futura versione di MySQL è possibile creare una vista contenente le 2 tabelle e inserirla in quella.
Ma con MySQL 5.1.41 si otterrà l'errore:
"Non è possibile modificare più di una tabella di base tramite una vista join"

Ma l'inserimento in 2 tavole con 1 query è una cosa strana per do, e Non lo consiglio.


Per ulteriori informazioni sulle viste aggiornabili, consultare MySQL reference.

+0

Non è strano voler aggiornare (o inserire in) più tabelle come parte di un'operazione singola atomica (vale a dire che tutto o niente accade). Più il tuo database è normalizzato, più è probabile il bisogno. Hai solo bisogno di proteggere gli aggiornamenti multipli in una transazione db. –

+0

Vero, ma quando vedo un'istruzione * single * insert, supporrò che solo 1 tabella sia interessata. La parte "strana" si applica all'aspetto 1 query. –

3

È possibile chiamare una stored procedure con inserimenti in due tabelle.

+0

La risposta è sì ed è così che lo fai. Utile in caso di latenza prolungata del DB per la combinazione di più inserti in un'unica istruzione. – Mark

4

No, non è possibile.

Se si desidera garantire l'atomicità di un'operazione che richiede l'inserimento di dati in 2 tabelle, è necessario proteggerla in una transazione. È possibile utilizzare le istruzioni SQL BEGIN TRAN e COMMIT TRAN oppure utilizzare un limite di transazione in qualsiasi lingua si utilizzi per sviluppare il livello di accesso db. Per esempio. qualcosa come Connection.StartTransaction e Connection.Commit (o Connection.Rollback su un errore).

Problemi correlati