如何在mysql中添加所有表的前缀

Fer*_*ero 14 mysql rename

如何使用查询为mysql中的所有表添加前缀.

例如:

我需要在mysql数据库中提供的所有表中添加" dr_ ".

Abh*_*hay 17

运行运行此查询所获得的所有查询:

SELECT Concat('ALTER TABLE `', TABLE_NAME, '` RENAME TO `dr_', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '<name of your db>';
Run Code Online (Sandbox Code Playgroud)

  • 这看起来会起作用(虽然还没有实际运行命令),但添加"Where TABLE_SCHEMA ='db_name'"会将表限制为该单个数据库,如果您有多个数据库,这可能是您想要的. (4认同)

Rol*_*DBA 15

在本例中,我将创建一个名为prefixdb的数据库,其中包含4个表:

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)
Run Code Online (Sandbox Code Playgroud)

生成它的查询将是

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
;
Run Code Online (Sandbox Code Playgroud)

在命令行运行它我得到这个:

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)
Run Code Online (Sandbox Code Playgroud)

将结果传递回mysql,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

关于您的问题,如果要重命名所有表,请不要触摸information_schema和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 not in ('information_schema','mysql')) A,
    (SELECT 'dr_' prfx) B
;
Run Code Online (Sandbox Code Playgroud)

试试看 !!!