2011-11-01 56 views
8

¿Cómo puedo agregar el prefijo a todas las tablas en mysql mediante la consulta?Cómo agregar el prefijo de todas las tablas en mysql

Por ejemplo:

tengo que añadir "Dr_" en todas las mesas que están disponibles en la base de datos MySQL.

+1

Utilice INFORMATION_SCHEMA para obtener todas las tablas en su base de datos. –

Respuesta

11

Ejecutar todas las consultas que se obtienen de ejecución de esta consulta:

SELECT Concat('ALTER TABLE `', TABLE_NAME, '` RENAME TO `dr_', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '<name of your db>'; 
+4

Parece que funcionará (aunque todavía no ejecutaron los comandos), pero al agregar "Donde TABLE_SCHEMA = 'nombre_bd'" se restringirán las tablas a ese solo db, que probablemente sea lo que se desea si tiene varias bases de datos. –

+1

¡Esto es genio! Además, agregue los signos \ 'alrededor del nombre de la tabla: 'SELECT Concat (' ALTER TABLE \' ', TABLE_NAME, \ '' RENAME TO \ 'dr_', TABLE_NAME, '\';') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'db_name'; ' – Jeffrey

12

Para este ejemplo, voy a crear una base de datos llamada prefixdb con 4 mesas:

mysql> drop database if exists prefixdb; 
Query OK, 4 rows affected (0.01 sec) 

mysql> create database prefixdb; 
Query OK, 1 row affected (0.00 sec) 

mysql> use prefixdb 
Database changed 
mysql> create table tab1 (num int) ENGINE=MyISAM; 
Query OK, 0 rows affected (0.05 sec) 

mysql> create table tab2 like tab1; 
Query OK, 0 rows affected (0.05 sec) 

mysql> create table tab3 like tab1; 
Query OK, 0 rows affected (0.05 sec) 

mysql> create table tab4 like tab1; 
Query OK, 0 rows affected (0.04 sec) 

mysql> show tables; 
+--------------------+ 
| Tables_in_prefixdb | 
+--------------------+ 
| tab1    | 
| tab2    | 
| tab3    | 
| tab4    | 
+--------------------+ 
4 rows in set (0.00 sec) 

La consulta para generar lo haría se

select 
    concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') 
from 
    (select table_schema db,table_name tb 
    from information_schema.tables where 
    table_schema='prefixdb') A, 
    (SELECT 'dr_' prfx) B 
; 

de ejecutarlo en la línea de comandos me sale esto:

mysql> select concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') from (select table_schema db,table_name tb from information_schema.tables where table_schema='prefixdb') A,(SELECT 'dr_' prfx) B; 
+----------------------------------------------------------------+ 
| concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') | 
+----------------------------------------------------------------+ 
| alter table prefixdb.tab1 rename prefixdb.dr_tab1;    | 
| alter table prefixdb.tab2 rename prefixdb.dr_tab2;    | 
| alter table prefixdb.tab3 rename prefixdb.dr_tab3;    | 
| alter table prefixdb.tab4 rename prefixdb.dr_tab4;    | 
+----------------------------------------------------------------+ 
4 rows in set (0.00 sec) 

pasar el resultado de nuevo en MySQL como esto:

mysql -hhostip -uuser -pass -AN -e"select concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') from (select table_schema db,table_name tb from information_schema.tables where table_schema='prefixdb') A,(SELECT 'dr_' prfx) B" | mysql -hhostip -uuser -ppass -AN 

Con respecto a su pregunta si desea cambiar el nombre de todas las tablas, no toque las bases de datos INFORMATION_SCHEMA y MySQL. Utilice esta consulta en su lugar:

select 
    concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') 
from 
    (select table_schema db,table_name tb 
    from information_schema.tables where 
    table_schema not in ('information_schema','mysql')) A, 
    (SELECT 'dr_' prfx) B 
; 

darle una oportunidad !!!

+0

¡No estoy seguro de qué haya impedido que se aceptara esta respuesta! – codisfy

0

Para agregar a la excelente y completa respuesta de Rolando. Si ejecuta las consultas RENAME generadas por su consulta SELECT CONCAT (utilicé phpMyAdmin y simplemente copié las consultas de salida en el cuadro SQL y presioné Ir), entonces no debería haber ningún problema con las restricciones de clave externa. Acabo de hacer esto en una base de datos de prueba en XAMPP y todas las tablas se renombraron como aceptables, y las restricciones permanecieron intactas. Esto puede parecer obvio para los expertos en SQL pero quizás no tanto para nosotros los aficionados.

0

Agregue un prefijo a todas las tablas de su base de datos.

Suponiendo que la base de datos se llama "MY_DATABASE" y el prefijo que desea agregar es "my_prefix", ejecute la siguiente consulta:

SELECT Concat('ALTER TABLE ', TABLE_NAME, ' RENAME TO my_prefix_', TABLE_NAME, ';') FROM information_schema.tables WHERE table_schema = 'my_database' 

Su conjunto de resultados habrá un montón de preguntas que se pueden copiar y pegue en su editor favorito de MySQL (Sequel Pro, phpMyAdmin, lo que sea). Solo péguelos y ejecútelos, y todo habrá terminado.

Cuestiones relacionadas