¿Cómo puedo agregar prefijo a todas las tablas en mysql query.

Por ejemplo:

Necesito agregar «dr_» en todas las tablas disponibles en la base de datos mysql.

El uso de la INFORMATION_SCHEMA para obtener todas las tablas de su base de datos.

OriginalEl autor Fero | 2011-11-01

4 Comentarios

  1. 13

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

    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 sería

    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
    ;

    Se ejecuta 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 este:

    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 tu pregunta si desea cambiar el nombre de todas las tablas, no toque information_schema y bases de datos 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 está seguro de lo que dejó esta respuesta de conseguir alguna vez aceptado!

    OriginalEl autor RolandoMySQLDBA

  2. 13

    Ejecutar todas las consultas que se obtiene de la 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>';
    Esto parece que se va a trabajar (en realidad no ejecutar los comandos sin embargo, a pesar de que), pero añadiendo «Donde TABLE_SCHEMA=’db_name'» restringir las tablas para que solo db, que es probablemente lo que se quiere si usted tiene varias bases de datos.
    Este es un genio! Un pequeño aporte, agregar los ` signos de todo el nombre de la tabla: SELECT Concat('ALTER TABLE `', TABLE_NAME, `' RENAME TO `dr_', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='db_name';

    OriginalEl autor Abhay

  3. 0

    Para agregar a Rolando excelente y completa respuesta. Si ejecuta el cambio de nombre de las consultas generadas por su SELECT CONCAT consulta (he utilizado el phpMyAdmin y acaba de copiar la salida de las consultas en SQL cuadro y pulse Ir), entonces no debería tener ningún tipo de problemas con restricciones de clave externa. Me acabo de hacer esto sobre una base de datos de prueba en XAMPP y todas las tablas cambiado el nombre de aceptar, y las limitaciones que se mantuvo intacto. Esto puede parecer obvio, a expertos de SQL, pero tal vez no tanto para nosotros los aficionados.

    OriginalEl autor Fred Riley

  4. 0

    Agregar un prefijo a todos los de su base de datos de las tablas.

    Suponiendo que la base de datos se llama «mi_base_datos» 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'

    El conjunto de resultados va a ser un montón de consultas que usted puede copiar y pegar en tu favorito MySQL editor (Secuela Pro, phpMyAdmin, lo que sea). Sólo tienes que pegar los en y ejecutar, y ya está todo hecho.

    OriginalEl autor Ingo

Dejar respuesta

Please enter your comment!
Please enter your name here