¿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.
¿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.
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>';
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. –
¡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
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 !!!
¡No estoy seguro de qué haya impedido que se aceptara esta respuesta! – codisfy
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.
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.
Utilice INFORMATION_SCHEMA para obtener todas las tablas en su base de datos. –