【问题标题】:How to remove a prefix name from every table name in a mysql database如何从mysql数据库中的每个表名中删除前缀名
【发布时间】:2011-06-19 17:59:33
【问题描述】:

我有一个 joomla mysql 数据库,在我的所有表名上都有一个表名前缀“jos_”。但我想从我所有的桌子上删除它。我了解如何重命名每个表,一次一个,但我有 600 个表。是否有一个易于运行的 sql 查询来执行此操作。

如果有人有解决方案,能否请您发布我可以使用的确切 sql 查询?

【问题讨论】:

  • 希望这里没有内部依赖!

标签: mysql sql phpmyadmin


【解决方案1】:

您可以使用单个查询生成必要的语句:

select 'RENAME TABLE ' || table_name ||  ' TO ' || substr(table_name, 5) ||';'
from information_schema.tables

将该查询的输出保存到文件中,您就拥有了所有需要的语句。

或者如果返回 0s 和 1s 而不是语句,这里是使用 concat 的版本:

select concat('RENAME TABLE ', concat(table_name, concat(' TO ', concat(substr(table_name, 5), ';'))))
from information_schema.tables;

【讨论】:

  • 很确定您正在寻找concat,而不是||(无论如何,我的MySQL副本不起作用)。
  • || 为我工作(但我在 ANSI 模式下运行我的安装)
  • 我为 || 返回 0s 和 1s 的人添加了 concat 版本。
【解决方案2】:
  1. 在 phpmyadmin 中选择数据库的所有表。
  2. 从下拉列表“选择:”中选择“替换表前缀”
  3. 设置从->到替换。
  4. 完成

【讨论】:

  • 天啊。这个解决方案很棒。你就是这样做的
【解决方案3】:

您可以创建自己的存储过程来重命名表,这样您就无需打开外部编辑器,一切都将在服务器上完成:

delimiter //
CREATE PROCEDURE rename_tables( IN db CHAR(255), IN srch CHAR(255), IN rplc CHAR(255) )
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE from_table CHAR(255);
  DECLARE cur1 CURSOR FOR SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=db;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

  OPEN cur1;

  read_loop: LOOP
    IF done THEN
      LEAVE read_loop;
    END IF;

    FETCH cur1 INTO from_table;
    SET @to_table = REPLACE(from_table, srch, rplc);

    IF from_table != @to_table THEN
      SET @rename_query = CONCAT('RENAME TABLE ', db, '.', from_table, ' TO ', @to_table, ';');

      PREPARE stmt FROM @rename_query;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
    END IF;

  END LOOP;

  CLOSE cur1;
END//
delimiter ;

用法:

CALL rename_tables('test', 'jos_', '');

更新:这是我的第一个 MySQL 存储过程,我遇到了 6 岁老的 bug #5967,这很烦人,你的变量名必须不同于字段名称,因为如果不是,您将在变量中获得 NULL 值。

因此,如果您决定编写 MySQL 存储过程,请注意这一点。

【讨论】:

    猜你喜欢
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2017-06-12
    • 2018-04-08
    • 2021-11-23
    • 1970-01-01
    • 2020-01-01
    相关资源
    最近更新 更多