2010-10-05 32 views
31

asumiendo que tengo dos tablas, names y phones y quiero insertar datos de algunas entradas a las tablas, en una consulta: ¿cómo se puede hacer?sql - insertar en varias tablas en una consulta

Por favor, si se puede hacer, explicar la sintaxis.

+0

supongo que la respuesta será "No se puede" para todas las bases de datos, pero por si acaso, lo que la base de datos está utilizando? – LittleBobbyTables

+0

MySQL, versión más reciente (vi algunas soluciones que utilizan "salida" para ese trabajo, pero prefiero evitar caminar por los alrededores ..) La respuesta de – yossi

Respuesta

19

MySQL no soporta la inserción de varias mesas en una sola INSERT statement. Oracle es el único que soy consciente de que lo hace, por extraño ...

INSERT INTO NAMES VALUES(...) 
INSERT INTO PHONES VALUES(...) 
+7

Joshua Smith es mejor que éste. –

60

No se puede. Sin embargo, se puede utilizar una transaccióny tienen ambos estar contenido dentro de una transacción.

START TRANSACTION; 
INSERT INTO table1 VALUES ('1','2','3'); 
INSERT INTO table2 VALUES ('bob','smith'); 
COMMIT; 

http://dev.mysql.com/doc/refman/5.1/en/commit.html

+1

Saludos Joshua, esto me ayudó mucho. Aunque en MySql creo que esto es START en lugar de BEGIN. – steve

+2

¿Cuál es el propósito de las transacciones? Supongo que si algo sale mal en una de las consultas, todas las consultas se revertirán. ¿Es asi? ¿O también hay algún aumento en el rendimiento? – Clox

+3

@Clox: Ese es parcialmente el propósito de las transacciones. El otro propósito es que la base de datos se encuentre en un estado estable conocido antes, durante y después de la transacción. Esto significa que las consultas concurrentes nunca verán datos parcialmente comprometidos. –

3

que tenían el mismo problema. Lo resuelvo con un bucle for.

Ejemplo:

Si quiero escribir en 2 idénticos tablas, usando un bucle

for x = 0 to 1 

if x = 0 then TableToWrite = "Table1" 
if x = 1 then TableToWrite = "Table2" 
    Sql = "INSERT INTO " & TableToWrite & " VALUES ('1','2','3')" 
NEXT 

ya sea

ArrTable = ("Table1", "Table2") 

for xArrTable = 0 to Ubound(ArrTable) 
Sql = "INSERT INTO " & ArrTable(xArrTable) & " VALUES ('1','2','3')" 
NEXT 

Si usted tiene una consulta Pequeños No saber si esta es la mejor solución, pero si tu consulta es muy grande y está dentro de un script dinámico con condiciones if/else/case esta es una buena solución.

+0

útil cuando tiene que insertar los mismos valores y/o el mismo número de valores para cada tabla. –

Cuestiones relacionadas