Entra

View Full Version : [MySql]unica insert per diverse tabelle


RaouL_BennetH
22-03-2007, 13:32
Ciao a tutti :)

Volevo chiedervi come fare per eseguire tramite un'unica insert, l'inserimento di dati in più tabelle. Mi spiego meglio:

Ho queste tabelle:

Cantieri (ID_Cantiere, descrizione)
CantieriSedi(ID_Sede, ID_Cantiere, sede)
Servizi(ID_Servizio, descrizione) //i dati in questa tabella sono già presenti
CantieriServizi(ID_Lavoro, ID_Cantiere, ID_Servizio, descrizione)

ora, dovrei fare in modo che attraverso un'unica insert, l'inserimento avvenga così:

in Cantieri la descrizione (nessun problema);
in CantieriSedi, prenda l'ID_Cantiere da Cantieri;
in CantieriServizi, prenda l'ID_Cantiere da Cantieri, ID_Servizio e descrizione da Servizi.

Mi date una mano?

Grazie.

RaouL.

cionci
22-03-2007, 15:57
Perché un'unica insert ? Per problemi di consistenza ?

RaouL_BennetH
22-03-2007, 16:45
Perché un'unica insert ? Per problemi di consistenza ?

Ciao cionci :)

Alla tua domanda non so rispondere in quanto non so in termini di informatica cosa significhi "consistenza" :(

Lo chiedevo perchè a "naso" non mi sembrava corretto eseguire più insert.

La mole dei dati con la quale ho a che fare è comunque piccolina.

Mi diresti a grandi linee cosa si intende per "consistenza" ?


Grazie mille :)

RaouL.

cionci
22-03-2007, 16:51
Può voler dire tante cose, ma in questo caso: se fa insert in istruzioni diverse ti si potrebbero inserire altre insert (o update) nel mezzo e magari le tue insert non avrebbero più il significato voluto.

Che tipo di tabelle usi ? InnoDB o MyISAM ?

RaouL_BennetH
22-03-2007, 17:01
Per queste tabelle, dato che non ci devo effettuare transazioni, e la mole dei dati è piccola, per questioni di velocità sto usando MyIsam.

cionci
22-03-2007, 17:14
Allora usa Lock e Unlock ;)

LOCK TABLES pippo WRITE, pluto WRITE;

fai le tue insert

UNLOCK TABLES;

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

RaouL_BennetH
22-03-2007, 17:21
E' perfetto :) Grazie mille.

Un'altra piccola cosa se posso dato che ora riesco a fare queste insert.

Succede che ho queste tabelle:

Cantiere (ID_Cantiere, descrizione)
CantiereSede(ID_Sede, ID_Cantiere)

Ora, dovrei fare in modo di verificare quando i due ID_Cantiere sono uguali avendo però come condizione di confronto solo la descrizione del cantiere.

E' possibile?


Grazie.


RaouL.

RaouL_BennetH
22-03-2007, 17:25
uhm... sto sognando?

è come se mi bastasse:



SELECT cantieri.ID_Cantiere, cantieriSedi.ID_Cantiere FROM cantieri, cantieriSedi
WHERE descrizione = 'MIO_CANTIERE';