从数据库的所有mysql表名中删除前缀

时间:2016-01-30 15:19:54

标签: mysql

*我想删除MySQL中所有表名的前缀

我有一个包含100多个表的测试数据库,因此我不想通过手动过程或重命名每个表格。

e.g 的 ci_categories ci_products

预期产量: 的类别产品

我想从所有表中删除前缀,即 ci _

是否有MySQL查询来实现这一目标?

由于 阿米特

1 个答案:

答案 0 :(得分:1)

我已经编写了一个mysql存储过程来更改表名,因为没有其他直接的方法可以通过单个查询更改所有表名。

delimiter //
CREATE  PROCEDURE `ChangeTableNameProcedure`()
BEGIN

    DECLARE int_val INT DEFAULT 0;
    DECLARE my_outer_cursor_done INT DEFAULT FALSE; 
    DECLARE my_oldTable VARCHAR(100);
    DECLARE my_newTable VARCHAR(100);

    DECLARE tableNameCursor CURSOR FOR SELECT TABLE_NAME oldName,
    CONCAT(SUBSTRING(TABLE_NAME,POSITION('ci_' IN TABLE_NAME) + 3)) newName
    FROM information_schema.tables 
    WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME' AND TABLE_NAME LIKE 'ci_%';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET my_outer_cursor_done = TRUE;



OPEN tableNameCursor;
    OUTER_CURSOR_LOOP: LOOP
            FETCH FROM tableNameCursor INTO my_oldTable,my_newTable;

                    IF my_outer_cursor_done THEN
                        CLOSE tableNameCursor;
                        LEAVE OUTER_CURSOR_LOOP;
                    END IF;
                    SET @old = my_oldTable;
                    SET @new = my_newTable;
                    SET @statement = CONCAT('RENAME TABLE ',@old,' TO ',@new);

                    PREPARE stmt FROM @statement;
                    EXECUTE stmt;
                    DEALLOCATE PREPARE stmt;


                    END LOOP OUTER_CURSOR_LOOP;


    END//

<强> N:B:

  1. 我假设数据库中的所有表名都有前缀 的 CI _ 即可。
  2. 您必须将您的数据库名称放在TABLE_SCHEMA =中 &#39; YOUR_DATABASE_NAME&#39;子句。
  3. 请注意, + 3 代表前三个新表名 将跳过字符(如果您的旧表名是&#39; ci_old_table&#39; 那么你的新表名将是“old_table&#39;”。请注意,&#39; ci _&#39;第一 新表名中已跳过三个字符。)
  4. 创建程序后,您只需按名称调用它即可。 语法为Call ChangeTableNameProcedure();
  5. 请确保在创建程序时不要忽略 分隔符//