Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/12/2009, 07:09
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: sobre tablas temporales (saber si existe)

En INFORMATION_SCHEMA existen sólo las tablas físicas. Una tabla TEMPORARY no existe desde el punto de vista físico (entre otras cosas por esa razón tiene también un límite de registros, y ciertos campos no pueden existir en ella), ya que solamente existe en memoria, y depende de la conexión (como se lee en el post que te puse).
Desde ese punto de vista no tiene permanencia ni entidad. Es como si fuese una variable: A una variable no la puedes buscar por su nombre por fuera del método o función que la crea y usa. Para transferirla, se transfiere su valor, o bien su referencia en memoria.
Las tablas MEMORY, por su parte, son algo diferentes: no se pierden las tablas, sino su contenido:
Cita:
Cada tabla MEMORY está asociada con un fichero de disco. El nombre de fichero comienza con el nombre de la tabla y tiene una exensión de .frm para indicar que almacena la definición de la tabla.

Para especificar explícitamente que quiere una tabla MEMORY, indíquelo con una opción ENGINE :

Cita:
CREATE TABLE t (i INT) ENGINE = MEMORY;
Como indica su nombre, las tablas MEMORY se almacenan en memoria y usan índices hash por defecto. Esto las hace muy rápidas, y muy útiles para crear tablas temporales. Sin embargo, cuando se apaga el servidor, todos los datos almacenados en las tablas MEMORY se pierde. Las tablas por sí mismas continúan existiendo ya que sus definiciones se almacenan en ficheros .frm en disco, pero están vacías cuando reinicia el servidor.
Desde esa óptica, entonces, las tablas TEMPORARY jamás aparecerán en INFORMATION_SCHEMA. Es tu responsabilidad como programador y DBA saber qué existe y qué no allí, y recordar en qué momento las cosas desaparecen.
Te recalco esto sobre las TEMPORARY, que es muy importante:
Cita:
Esto significa que dos conexiones distintas pueden usar el mismo nombre de tabla temporal sin entrar en conflicto entre ellas ni con tablas no TEMPORARY con el mismo nombre. (La tabla existente se oculta hasta que se borra la tabla temporal.) E
Esto quiere decir que la tabla pertenece y es visible sólo para el usuario que la creó, en la conexión en que la creó. La conexión se cierra y la tabla desaparece.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)