Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/11/2011, 07:54
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: 17 años
Puntos: 2658
Respuesta: ¿Borrar todas las tablas que empiecen por temp_?

En realidad, ese tipo de scripts son PHP, no es tema de MySQL, y no es conveniente andar borrando dinámicamente tablas, porque las estructuras de base de datos deben ser fijas.
Permitir que un usuario tenga privilegios suficientes como para borrar tablas es una muy mala práctica, una pésima práctica. De hecho, ni siquiera debería tener el privilegio para crearlos.
Hay otro problema adicional, y es que si esas tablas son usadas temporalmente (como indica su nombre) para procesar datos en una sesión de usuario, el sólo crearlas te producirán problemas severos si en algún momento el mismo proceso es usado por dos o más usuarios que actúen concurrentemente. En tales casos ni siquiera puedes borrarlas, porque si otro usuario también las necesita harás colapsar el proceso en curso.

Resumiendo:
1) No uses tablas temporales creadas en forma fija.
2) No destruyas tablas si tienes usuarios concurrentes.
3) No permitas que los usuarios tengan privilegios de DROP TABLE, bajo ninguna circunstancia.

Ahora bien, el hecho de que no convenga o no deban tener esos privilegios no implica que no se puedan usar cierto tipo de tablas para crear procesos temporales. El error consiste en crear el tipo de tablas fijas como temporales. Lo que debes hacer es crear tablas de tipo TEMPORARY.
Las tablas TEMPORARY se crean dentro de la sesión abierta por el usuario en MySQL (no en PHP), y existen mientras esa conexión siga abierta. Tienen la ventaja de que como sólo existen en la sesión de MySQL que las crea, diferentes sesiones de diferentes usuarios pueden usar al mismo nombre de tabla sin crear conflictos, porque la tabla de una sesión es invisible e inaccesible para otra sesión, aunque la sesión sea del mismo usuario y con el mismo password.
La ventaja principal para tu caso es que una tabla TEMPORARY se borra sola, en el mismo momento en que la sesió se cierra. Esto trae un sólo problema: La conexión debe ser buena, porque si una sesión se cae en el medio del proceso, las tablas creadas desaparecerán instantáneamente. De todos modos, las ventajas de usar este tipo de tablas superan ampliamente el riesgo de caida de conexiones.

Para crear una tabla TEMPORARY sólo debes incluir la cláusula TEMPORARY en el CREATE TABLE y si quieres borrarla directamente, también en el DROP, ya que puedes crear una tabla TEMPORARY con el mismo nombre que existe entre las fijas:
Código MySQL:
Ver original 
Código MySQL:
Ver original
  1. DROP TEMPORARY TABLE  tabla...

En definitiva: Cambia el tipo de tablas por TEMPORARY y olvidate del borrado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)