开发者

Mysql批量修改表名实现去掉表前缀

开发者 https://www.devze.com 2025-09-25 09:37 出处:网络 作者: 顾米楠
目录需求步骤1. 先验证 执行前先运行以下查询确认要修改的表2. mysql版本检查3. 分步执行RENAME TABLE总结在项目中 我们可能遇到修改表名的需求 比如数据库中 部分表名带有前缀 部分表不带前缀 如果我
目录
  • 需求
  • 步骤
    • 1. 先验证 执行前先运行以下查询确认要修改的表
    • 2. mysql版本检查
    • 3. 分步执行RENAME TABLE
  • 总结

    在项目中 我们可能遇到修改表名的需求 比如数据库中 部分表名带有前缀 部分表不带前缀 如果我想去掉这些带前缀的部分表名 应该怎么做呢?

    使用代码层面修改太麻烦 不如直接使用mysql脚本达到目标 mysql版本要求在 5.7+

    需求

    将数据库中带有 sw_ 前缀的表 修改表名 去掉sw_

    步骤

    1. 先验证 执行前先运行以下查询确认要修改的表

    SELECT table_name AS original_name, 
           SUBSTRING(table_name, 4) AS new_name
    FROM information_schema.tables
    WHERE table_schema = DATABASE()
    AND table_name LIKE 'sw_%';
    

    2. MySQL版本检查

    SELECT VERSION();

    注意 mysql版本需要 5.7+

    3. 分步执行RENAME TABLE

    -- 步骤1:创建临时表存储重命名映射
    CREATE TEMPORARY TABLE temp_rename_mapping (
        old_name VARCHAR(255),
        new_name VARCHAR(255)
    );
    
    -- 步骤2:插入需要修改的表名
    INSERT INTO temp_rename_mapping
    SELECT 
        table_name AS old_name,
        SUBSTRING(table_name, 4) AS new_name
    FROM 
        information_schema.tables 
    WHERE 
        table_schema = DATABASE()
        AND table_name LIKE 'sw_%';
    
    -- 步骤3:生成并执行单个RENAME语句(更安全的方式)
    DELIMITER //
    CREATE PROCEDURE BATch_rename_tables()
    BEGIN
        DECLARE done INT DEFAULTandroid FALSE;
        DECLARE old_tbl VARCHAR(255);
        DECLARE new_tbl VARCHAR(255);
        DECLARE cur CURSOR FOR SELECT old_name, new_name FROM temp_rename_mapping;
        DEC编程客栈LARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
        
        OPEN cur;
        read_loop: LOOP
            FETCH cur INTO old_tbl, new_tbl;
     编程客栈       IF done THEN
                LEAVE read_loop;
            END IF;
            
            SEhttp://www.devze.comT @rename_sql = CONCAT('RENAME TABLE `', old_tbl, '` TO `', new_tbl, '`');
            PREPARE stmt FROM @rename_sql;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
        END LOOP;
        CLOSE cur;
    END //
    DELIMITER ;
    
    -- 执行存储过程
    CALL batch_rename_tables();
    
    -- 清理
    DROP PROCEDURE batch_rename_tables;
    DROP TEMPORARY TABLE temp_rename_mapping;
    

    亲测有效~

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.cphttp://www.devze.compcns.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号