Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

¿Borrar todas las tablas que empiecen por temp_?

Estas en el tema de ¿Borrar todas las tablas que empiecen por temp_? en el foro de Mysql en Foros del Web. Buenas ¿Cómo puedo borrar todas las tablas de una base de datos que empiecen por temp_? Es para borrar las tablas de un CMS que ...
  #1 (permalink)  
Antiguo 18/11/2011, 11:45
 
Fecha de Ingreso: junio-2003
Mensajes: 940
Antigüedad: 20 años, 9 meses
Puntos: 8
Pregunta ¿Borrar todas las tablas que empiecen por temp_?

Buenas

¿Cómo puedo borrar todas las tablas de una base de datos que empiecen por temp_?

Es para borrar las tablas de un CMS que me las genera.

En un foro he visto el siguiente script, pero no me lo hace:


<?php




function clear_temp () {

// checks for tables that begin with variable $tmp_table_prefix then deletes them
global $conn, $config;

// set temp_table_prefix (adjust as necessary)
$tmp_table_prefix = $config['table_prefix']. 'temp_';

$sql = "SHOW TABLES LIKE '$tmp_table_prefix%'";
$recordSet = $conn->Execute($sql);

if (!$recordSet) echo($sql);

$num = $recordSet->RecordCount();

// create query string to delete all tables that begin with $tmp_table_prefix
$sqlD = "DROP TABLE IF EXISTS ";

for ($loop=0; $loop < $num;)
{
$loop++;
$sqlD .= $recordSet->fields[0];

if (($num - $loop) > 0) $sqlD .= ", ";
$recordSet->MoveNext();
}

//echo $sqlD;

// Nuke those tables
$recordSetD = $conn->Execute($sqlD);

if (!$recordSetD) echo($sqlD) .' -- none exist';

else echo '<br>Finished';

} //end function clear_temp ()


?>


Muchas Gracias
  #2 (permalink)  
Antiguo 20/11/2011, 07:38
 
Fecha de Ingreso: junio-2003
Mensajes: 940
Antigüedad: 20 años, 9 meses
Puntos: 8
Respuesta: ¿Borrar todas las tablas que empiecen por temp_?

Buenas
He visto un par de script aquí y me han servido: http://forums.devshed.com/mysql-help...ml#post1849907
  #3 (permalink)  
Antiguo 20/11/2011, 07:43
 
Fecha de Ingreso: junio-2003
Mensajes: 940
Antigüedad: 20 años, 9 meses
Puntos: 8
Respuesta: ¿Borrar todas las tablas que empiecen por temp_?

Se me olvidaba, IMPORTANTE borrar del servidor el script después de usarlo.
  #4 (permalink)  
Antiguo 20/11/2011, 07:54
Avatar de 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, 4 meses
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)
  #5 (permalink)  
Antiguo 21/11/2011, 12:37
 
Fecha de Ingreso: junio-2003
Mensajes: 940
Antigüedad: 20 años, 9 meses
Puntos: 8
Respuesta: ¿Borrar todas las tablas que empiecen por temp_?

Muchas gracias por la explicación gnzsoloyo , información muy bien explicada.
  #6 (permalink)  
Antiguo 21/11/2011, 12:49
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: ¿Borrar todas las tablas que empiecen por temp_?

Me alegro si te sirve. Yo las he usado mucho en ciertos procesos, y me han resultado muy úitles.

Un detalle que me olvidé mencionarte es que se pueden crear índices sobre las tablas TEMPORARY, que en ocasiones se necesitan por performance. Los índices sobre esas tablas también desaparecen al cerrarse la conexión.

:arriba
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: php, query, sql, tabla, tablas, todas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:11.