2010-03-17 34 views

Respuesta

26

solución zerkms no funcionó para mí. Tuve que especificar la base de datos information_schema para poder consultar la tabla Tables.

SELECT 
    CONCAT('RENAME TABLE ', GROUP_CONCAT('`', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`')) AS q 
FROM 
    `information_schema`.`Tables` WHERE TABLE_SCHEMA='test'; 

Editar:

optimizado para la consulta única llamada RENAME TABLE vez. Algo en lo que entré fue el hecho de que la salida concatenada se truncó a 341 caracteres. Esto se puede resolver (si lo permite el servidor) estableciendo la variable de MySQL group_concat_max_len a un valor más alto:

SET group_concat_max_len = 3072; -- UTF8 assumes each character will take 3 bytes, so 3072/3 = 1024 characters. 
+0

Cierto, esto funcionó para mí ya que estaba trabajando en localhost XAMPP usando Joomla y quería cambiar al prefijo de Joomla automático. Sigo tus pasos: tuve que especificar el 'information_schema''Tables' como lo hiciste y establecer SET group_concat_max_len = 10240; en mi caso, ya que había muchas tablas. +1 – MJoraid

+1

Un punto más, puede usar el mismo comando para mover tablas a bases de datos (digamos backup_db) como: 'SELECT CONCAT ('RENAME TABLE', TABLE_NAME, 'TO backup_db.', TABLE_NAME, ';') FROM INFORMATION_SCHEMA. TABLAS DONDE table_schema = 'testbot'; ' – sactiw

+0

buen punto la edición sobre la variable' group_concat_max_len'! No recibí la oración completa, ¡funcionó muy bien! – AlexGH

21

escriba una secuencia de comandos que ejecutará RENAME TABLE para cada tabla.

SELECT 
    GROUP_CONCAT('RENAME TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`;' SEPARATOR ' ') 
FROM 
    `TABLES` WHERE `TABLE_SCHEMA` = "test"; 

donde "prueba" se espera nombre de la base

después de esto se puede consultar siempre que agregará prefijos si se ejecuta ello ;-)

3

simplemente se puede volcar la base de datos, abrir el vertedero con un editor de texto, reemplace todas las apariciones de "CREATE TABLE" con "CREATE TABLE dp_" y restaure la base de datos. Tarda un par de minutos en hacerlo.

+2

hasta que la base de datos tenga menos de un par de gigabytes ;-) – zerkms

+0

Estoy en el juego. :) Para bases de datos mayores que un GB, use una herramienta de consulta (SQL Workbench, por ejemplo), seleccione todas las tablas en la lista de tablas, copie los contenidos en la columna A de una hoja de cálculo (en mi caso, Calc) y ponga lo siguiente fórmula en la columna B: = "cambiar el nombre de la tabla" & A1 & "a dp_" & A1 & "; "Pegar la fórmula de la celda B1 en cada otra celda de la columna B y el script de cambio de nombre aparece en la columna B! –

+0

como dije en mi respuesta - una forma apropiada de cambiar el nombre es usar RENAME TABLE (+ information_shema para recuperar nombres de tablas) – zerkms

10

PhpMyAdmin le permite hacer esto ahora. En el nivel de "Base de datos", seleccione la pestaña Estructura para ver todas las tablas. Haga clic en 'marcar todo' (debajo de la lista de la tabla). En el menú desplegable 'Con seleccionado', seleccione: 'Reemplazar el prefijo de la tabla'.

Cuestiones relacionadas