如何从mysql数据库中的每个表名中删除前缀名称

时间:2011-06-19 17:59:33

标签: mysql sql phpmyadmin

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

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

3 个答案:

答案 0 :(得分:14)

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

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

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

或者如果它返回01而不是状态网,则使用concat的版本为:

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

答案 1 :(得分:12)

  1. 在phpmyadmin 选择数据库的所有表格
  2. 从下拉列表中选择<已选中:'选择'替换表格前缀'
  3. 从 - &gt;设置为替换。
  4. DONE

答案 2 :(得分: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存储过程,请注意这一点。