usando una tabla registros paso pagina mostrar listar informacion ejemplo datos crear consola conectar con como mysql sql-drop

una - listar registros de mysql usando php



MySQL tabla de caĆ­da masiva donde tabla como? (4)

Me pareció útil agregar un IFNULL a las soluciones de Devart para evitar generar un error si no hay tablas que coincidan con la consulta.

SET @tables = IFNULL(CONCAT(''DROP TABLE '', @tables),''SELECT NULL;'');

DROP TABLE ( SELECT table_name FROM information_schema.`TABLES` WHERE table_schema = ''myDatabase'' AND table_name LIKE BINARY ''del%'');

Sé que esto no funciona! ¿Cuál es el equivalente para algo como esto en SQL? Puedo hacer un simple script de Python para hacer esto, pero me preguntaba si podemos hacer algo con SQL directamente. Estoy usando MySQL. ¡Gracias!


Puedes usar declaraciones preparadas -

SET @tables = NULL; SELECT GROUP_CONCAT(''`'', table_schema, ''`.`'', table_name,''`'') INTO @tables FROM information_schema.tables WHERE table_schema = ''myDatabase'' AND table_name LIKE BINARY ''del%''; SET @tables = CONCAT(''DROP TABLE '', @tables); PREPARE stmt1 FROM @tables; EXECUTE stmt1; DEALLOCATE PREPARE stmt1;

Generará y ejecutará una declaración como esta:

DROP TABLE myDatabase.del1, myDatabase.del2, myDatabase.del3;


Si solo necesita eliminar rápidamente un grupo de tablas (no en SQL puro, por lo que no responde directamente a esta pregunta), un comando de shell de una línea puede hacerlo:

echo "show tables like ''fsm%''" | mysql | tail +2 | while read t; do echo "drop table /`$t/`;"; done | mysql


Una pequeña mejora en la respuesta de @Devart :

SET @tables = NULL; SELECT GROUP_CONCAT(table_schema, ''.`'', table_name, ''`'') INTO @tables FROM (select * from information_schema.tables WHERE table_schema = ''myDatabase'' AND table_name LIKE ''del%'' LIMIT 10) TT; SET @tables = CONCAT(''DROP TABLE '', @tables); select @tables; PREPARE stmt1 FROM @tables; EXECUTE stmt1; DEALLOCATE PREPARE stmt1;

Este script debe ejecutarse repetidamente hasta que la salida de la consola sea NULL

Los cambios son:

  1. Backtick (`) que encierra el nombre de la tabla (si contiene caracteres no estándar)
  2. Agregué un LIMIT para evitar el problema de truncamiento que comenté.
  3. se agregó una "impresión" ( select @tables; ) para tener algún tipo de control sobre cuándo detener la ejecución del script