mysql批量替换sql文件,AUTO_INCREMENT修改为1

一、概述

使用Navicat导出数据表结构,AUTO_INCREMENT的值,会特别大。

但是因为业务需求,需要将表结构在另外一套环境执行,并且要求AUTO_INCREMENT的值必须为1。

因为初始化表sql脚本,是针对AUTO_INCREMENT为1的情况下编写的,否则运行sql脚本会出错。

二、python批量替换

由于Navicat导出了几十个数据库,涉及到上千张表,一个个手动改sql文件太麻烦了,这里使用python脚本来进行批量替换。

import os
import re

def replace_auto_increment_in_file(file_path):
    """
    读取指定的 SQL 文件,将所有 AUTO_INCREMENT 的值替换为 AUTO_INCREMENT=1,
    并直接覆盖原始文件。
    """
    try:
        # 打开文件并读取内容
        with open(file_path, 'r', encoding='utf-8') as file:
            content = file.read()

        # 使用正则表达式替换 AUTO_INCREMENT 的值
        updated_content = re.sub(r'(\s*AUTO_INCREMENT\s*=\s*)\d+', lambda m: f"{m.group(1)}1", content)

        # 覆盖原始文件
        with open(file_path, 'w', encoding='utf-8') as file:
            file.write(updated_content)

        print(f"替换完成,文件 {file_path} 已更新。")
    except FileNotFoundError:
        print(f"错误:文件 {file_path} 未找到。")
    except Exception as e:
        print(f"处理文件 {file_path} 时发生错误:{e}")

def replace_auto_increment_in_directory(directory_path):
    """
    遍历指定目录下的所有 .sql 文件,并对每个文件执行替换操作。
    """
    if not os.path.exists(directory_path):
        print(f"错误:目录 {directory_path} 不存在。")
        return

    # 遍历目录下的所有文件
    for root, dirs, files in os.walk(directory_path):
        for file in files:
            if file.endswith('.sql'):  # 检查文件扩展名是否为 .sql
                file_path = os.path.join(root, file)
                replace_auto_increment_in_file(file_path)

# 使用示例
directory_path = r'E:/mysql/sql'  # 目标目录路径
replace_auto_increment_in_directory(directory_path)

注意修改变量directory_path,改为实际的路径。

运行完成之后,就可以看到上千表替换完成了,非常快!

将下面mysql语句切换为postgresql语句 -- 主表 CREATE TABLE biz_st_storage_controller ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, storage_name VARCHAR(100) NOT NULL COMMENT '存储名称', storage_model VARCHAR(50) NOT NULL COMMENT '存储型号', storage_serial VARCHAR(50) UNIQUE COMMENT '存储序列号', storage_disk_capacity VARCHAR(50) COMMENT '存储硬盘容量', storage_manage_ip VARCHAR(100) COMMENT '存储管理地址', storage_ip VARCHAR(100) COMMENT '存储地址', storage_username VARCHAR(100) COMMENT '存储账号', storage_password VARCHAR(100) COMMENT '存储密码' ); -- 硬盘框表 CREATE TABLE biz_st_disk_enclosure ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, storage_controller_id BIGINT UNSIGNED NOT NULL COMMENT '关联存储控制器', enclosure_id VARCHAR(30) NOT NULL UNIQUE COMMENT '物理框ID', enclosure_size VARCHAR(30) COMMENT '硬盘框尺寸', enclosure_count VARCHAR(30) COMMENT '硬盘框可插数量', enclosure_disk_size VARCHAR(30) COMMENT '硬盘框硬盘容量', enclosure_disk_classify VARCHAR(30) COMMENT '硬盘框硬盘分类', FOREIGN KEY (storage_controller_id) REFERENCES biz_st_storage_controller(id) ); -- 硬盘表 CREATE TABLE biz_st_disk ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, enclosure_id BIGINT UNSIGNED NOT NULL, type ENUM('SSD', 'HDD', 'NVMe', 'SAS') NOT NULL DEFAULT 'HDD' COMMENT '硬盘类型', model VARCHAR(50) NOT NULL COMMENT '硬盘型号', size_gb varchar(50) COMMENT '容量(GB)', position VARCHAR(20) NOT NULL COMMENT '位置', serial_number VARCHAR(50) COMMENT '序列号', size varchar(20) COMMENT '硬盘尺寸', FOREIGN KEY (enclosure_id) REFERENCES biz_st_disk_enclosure(id) ); -- 控制器表 CREATE TABLE biz_st_controller ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, storage_controller_id BIGINT UNSIGNED NOT NULL COMMENT '关联存储控制器', controller_management_ip VARCHAR(15) NOT NULL COMMENT '管理IP', controller_float_ip VARCHAR(15) COMMENT '浮动管理IP', controller_processor_ip VARCHAR(15) COMMENT '服务器处理器IP', controller_cache_capacity varchar(100) COMMENT '缓存容量(GB)', controller_cache_port varchar(100) COMMENT '固定端口', controller_cache_board varchar(100) COMMENT '板卡', controller_slot_number varchar(10) NOT NULL COMMENT '槽位号', FOREIGN KEY (storage_controller_id) REFERENCES biz_st_storage_controller(id) ); -- 板卡表 CREATE TABLE biz_st_board ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, controller_id BIGINT UNSIGNED NOT NULL COMMENT '关联存储控制器', borad_format varchar(50) comment '板卡格式', ip VARCHAR(15) COMMENT '板卡IP', type VARCHAR(30) NOT NULL DEFAULT 'FC' COMMENT '板卡类型', board_ports VARCHAR(50) comment '板卡端口', board_speed VARCHAR(50) comment '板卡速率', FOREIGN KEY (controller_id) REFERENCES biz_st_controller(id) );
08-08
[SQL] Query xiaochengxu start [ERR] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '; -- ---------------------------- -- View structure for v_zichanmingxi -- -' at line 1 [ERR] /* Navicat Premium Data Transfer Source Server : 123 Source Server Type : MySQL Source Server Version : 100137 Source Host : localhost:3306 Source Schema : xiaochengxu Target Server Type : MySQL Target Server Version : 100137 File Encoding : 65001 Date: 05/08/2025 11:28:25 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for bumen -- ---------------------------- DROP TABLE IF EXISTS `bumen`; CREATE TABLE `bumen` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL, `zhuangtai` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_520_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of bumen -- ---------------------------- INSERT INTO `bumen` VALUES (1, '建筑', '1'); INSERT INTO `bumen` VALUES (2, '敬老院', '1'); -- ---------------------------- -- Table structure for danwei -- ---------------------------- DROP TABLE IF EXISTS `danwei`; CREATE TABLE `danwei` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL, `zhuangtai` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_520_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of danwei -- ---------------------------- INSERT INTO `danwei` VALUES (1, '栋', '1'); INSERT INTO `danwei` VALUES (2, '张', '1'); -- ---------------------------- -- Table structure for diaobo -- ---------------------------- DROP TABLE IF EXISTS `diaobo`; CREATE TABLE `diaobo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `zichan` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL, `yuanren` int(10) NULL DEFAULT NULL, `xinren` int(10) NULL DEFAULT NULL, `time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL, `lingdao` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL, `zhuangtai` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, INDEX `diaobo_zichan`(`zichan`) USING BTREE, INDEX `diaobo_yuanren`(`yuanren`) USING BTREE, INDEX `diaobo_xinren`(`xinren`) USING BTREE, CONSTRAINT `diaobo_xinren` FOREIGN KEY (`xinren`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `diaobo_yuanren` FOREIGN KEY (`yuanren`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_520_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of diaobo -- ---------------------------- INSERT INTO `diaobo` VALUES (3, 'jz-1-00000001', 1, 2, '2025-08-05 10:08:58', '0', '0'); -- ---------------------------- -- Table structure for fangshi -- ---------------------------- DROP TABLE IF EXISTS `fangshi`; CREATE TABLE `fangshi` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL, `zhuangtai` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_520_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of fangshi -- ---------------------------- INSERT INTO `fangshi` VALUES (1, '自建', '1'); -- ---------------------------- -- Table structure for guanli -- ---------------------------- DROP TABLE IF EXISTS `guanli`; CREATE TABLE `guanli` ( `id` int(10) NOT NULL AUTO_INCREMENT, `bumen` int(10) NULL D [SQL] Finished with error
08-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值