2011-07-04 25 views
28

Tengo un procedimiento almacenado de MySQL que usa una tabla temporal. Supongamos que mi nombre de tabla es 'temp' y lo uso para almacenar algunos datos intermedios. Se creará al comienzo del procedimiento y caerá al final.¿La tabla temporal de MySQL es un recurso compartido?

CREATE PROCEDURE p() 
BEGIN 

CREATE TEMPORARY TABLE \`temp\`(...); 

INSERT INTO \`temp\` VALUES(...); 

DROP TEMPORARY TABLE \`temp\`; 

END; 

El problema es que este procedimiento almacenado puede ser utilizado por diferentes usuarios al mismo tiempo, por lo que quiero saber si esto puede causar algún problema (es decir, cualquier conflicto de datos insertados en la tabla temporal). En otras palabras, ¿la tabla temporal es un recurso compartido dentro de diferentes llamadas al mismo SP?

+0

No creo que tenga que soltar la tabla temporal porque es solo una tabla temporal –

Respuesta

44

No, una tabla temporal se limita al alcance de su conexión a la base de datos. Puede utilizar la tabla temporal en llamadas posteriores al procedimiento durante la misma conexión de base de datos, pero otras conexiones no pueden acceder a ella. Pueden crear una tabla con el mismo nombre, pero cada tabla temporal será independiente. Las tablas temporales desaparecen cuando cierra su conexión.

+0

obtengo resultados mixtos dentro de mis tablas temporales de diferentes llamadas a procedimientos almacenados realizadas por mi servidor web. ¿Puedes imaginar por qué está sucediendo esto? ¿Apache puede usar la misma conexión mysql para diferentes solicitudes HTTP? muchas gracias –

+0

@FeidaKila, no puedo adivinar a qué te refieres con "resultados mixtos". Tal vez deberías publicar una nueva pregunta. –

+0

como mixto me refiero a los resultados de diferentes llamadas a procedimientos almacenados (con diferentes parámetros) insertadas en la misma tabla temporal. Creo que crearé una nueva pregunta sobre este tema. Imagine el usuario A que llama SP (A, B, C); y userB llamando a SP (D, E, F); al mismo tiempo, de modo que la ejecución se realiza al mismo tiempo, y la tabla de destino obtiene filas insertadas de ambas llamadas a procedimientos. –

12

La tabla temporal solo está visible para sesión actual.

Si tiene varias sesiones simultáneas, cada una tendrá su propia tabla temporal independiente con el mismo nombre.

Documentación: http://dev.mysql.com/doc/refman/5.1/en/create-table.html, Ctrl + F para "Usted puede utilizar el temporal"

+1

¿Qué ocurre con una conexión de base de datos combinada? La sesión realmente no importa en absoluto. – gca

+2

@AnveshChecka, en el caso de una conexión agrupada, solo una sesión a la vez puede usar esa conexión. Al abrir la conexión, se elimina del grupo disponible (lo marca como en uso o lo que haga la implementación particular para eliminarlo del grupo de conexiones disponible). "Cerrar" la conexión solo la libera de vuelta al grupo para que otra sesión pueda usarla. La agrupación de conexiones elimina la sobrecarga asociada con la creación desde cero, la creación de contexto y la asignación de memoria en el servidor, etc. Sin embargo, nunca se usa una conexión combinada de forma simultánea desde varias sesiones. – Craig

Cuestiones relacionadas