¿Cómo borrar mis tablas que tienen el prefijo myprefix_
?
Nota: es necesario ejecutarlo en phpMyAdmin
¿Cómo borrar mis tablas que tienen el prefijo myprefix_
?
Nota: es necesario ejecutarlo en phpMyAdmin
Respuestas:
No puede hacerlo con un solo comando de MySQL, sin embargo, puede usar MySQL para construir la declaración por usted:
En el shell de MySQL o mediante PHPMyAdmin, use la siguiente consulta
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_name LIKE 'myprefix_%';
Esto generará una declaración DROP que puede copiar y ejecutar para eliminar las tablas.
EDITAR: Un descargo de responsabilidad aquí: la declaración generada anteriormente eliminará todas las tablas en todas las bases de datos con ese prefijo. Si desea limitarlo a una base de datos específica, modifique la consulta para que se vea así y reemplace database_name con su propia database_name:
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_schema = 'database_name' AND table_name LIKE 'myprefix_%';
[...] LIKE 'myprefix\_%';
Algunas de las respuestas anteriores fueron muy buenas. He reunido sus ideas con algunas nociones de otras respuestas en la web.
Necesitaba eliminar todas las tablas que comenzaban con 'temp_' Después de algunas iteraciones, se me ocurrió este bloque de código:
-- Set up variable to delete ALL tables starting with 'temp_'
SET GROUP_CONCAT_MAX_LEN=10000;
SET @tbls = (SELECT GROUP_CONCAT(TABLE_NAME)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database'
AND TABLE_NAME LIKE 'temp_%');
SET @delStmt = CONCAT('DROP TABLE ', @tbls);
-- SELECT @delStmt;
PREPARE stmt FROM @delStmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Espero que esto sea útil para otros programadores de MySQL / PHP.
show tables like 'prefix_%';
copie los resultados y péguelos en un editor de texto o envíe la consulta a un archivo, use algunas búsquedas y reemplazos para eliminar el formato no deseado y reemplácelos \n
con una coma, coloque una ;
al final y agregue una tabla desplegable al frente.
obtendrás algo que se parece a esto:
drop table myprefix_1, myprefix_2, myprefix_3;
La solución @ andre-miller es buena, pero hay una solución aún mejor y un poco más profesional que lo ayudará a ejecutar todo de una vez. Aún necesitará más de un comando, pero esta solución le permitirá usar SQL para compilaciones automatizadas.
SET @tbls = (SELECT GROUP_CONCAT(TABLE_NAME)
FROM information_schema.TABLES
WHERE TABLE_NAME LIKE 'myprefix_%');
PREPARE stmt FROM 'DROP TABLE @tbls';
EXECUTE stmt USING @tbls;
DEALLOCATE PREPARE stmt;
Nota: este código depende de la plataforma, es para MySQL pero seguro que podría implementarse para Postgre, Oracle y MS SQL con ligeros cambios.
SELECT CONCAT("DROP TABLE ", table_name, ";")
FROM information_schema.tables
WHERE table_schema = "DATABASE_NAME"
AND table_name LIKE "PREFIX_TABLE_NAME%";
Dejo caer la tabla con éxito editando la consulta para que me guste esto
SET GROUP_CONCAT_MAX_LEN=10000;
SET FOREIGN_KEY_CHECKS = 0;
SET @tbls = (SELECT GROUP_CONCAT(CONCAT('`', TABLE_NAME, '`'))
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'pandora'
AND TABLE_NAME LIKE 'temp_%');
SET @delStmt = CONCAT('DROP TABLE ', @tbls);
-- SELECT @delStmt;
PREPARE stmt FROM @delStmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
Puede hacerlo en un comando con MySQL:
drop table myprefix_1, myprefix_2, myprefix_3;
Sin embargo, probablemente tendrá que construir la lista de tablas dinámicamente en código.
Un enfoque alternativo sería utilizar la biblioteca de rutinas de propósito general para MySQL 5.
Solo quería publicar el SQL exacto que utilicé; es una mezcla de las 3 respuestas principales:
SET GROUP_CONCAT_MAX_LEN=10000;
SET @del = (
SELECT CONCAT('DROP TABLE ', GROUP_CONCAT(TABLE_NAME), ';')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name'
AND TABLE_NAME LIKE 'prefix_%'
);
PREPARE stmt FROM @del;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Solo otra solución que usa GROUP_CONCAT para que ejecute una consulta de caída como
DROP TABLE table1, table2, ..
SET @Drop_Stm = CONCAT('DROP TABLE ', (
SELECT GROUP_CONCAT(TABLE_NAME) AS All_Tables FROM information_schema.tables
WHERE TABLE_NAME LIKE 'prefix_%' AND TABLE_SCHEMA = 'database_name'
));
PREPARE Stm FROM @Drop_Stm;
EXECUTE Stm;
DEALLOCATE PREPARE Stm;
Descubrí que las declaraciones preparadas eran un poco complicadas para que me funcionaran, pero configurarlas GROUP_CONCAT_MAX_LEN
era esencial cuando tienes muchas tablas. Esto resultó en un proceso simple de tres pasos con cortar y pegar desde la línea de comando mysql que funcionó muy bien para mí:
SET GROUP_CONCAT_MAX_LEN=10000;
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_name LIKE 'myprefix_%';
Luego, corte y pegue con cuidado la declaración DROP larga resultante .
\G
lugar de ;
da un resultado un poco más limpio