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,改为实际的路径。

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

[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
mysql> -- 创建学生管理数据库 mysql> CREATE DATABASE IF NOT EXISTS student_management -> DEFAULT CHARACTER SET utf8mb4 -> COLLATE utf8mb4_0900_ai_ci; ERROR 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci' mysql> mysql> USE student_management; ERROR 1049 (42000): Unknown database 'student_management' mysql> mysql> -- 学生表 mysql> CREATE TABLE students ( -> student_id INT AUTO_INCREMENT PRIMARY KEY, -> name VARCHAR(50) NOT NULL, -> gender ENUM('男','女') DEFAULT '男', -> birthdate DATE, -> contact_phone VARCHAR(15) UNIQUE -> ) ENGINE=InnoDB; ERROR 1046 (3D000): No database selected mysql> mysql> -- 课程表 mysql> CREATE TABLE courses ( -> course_id INT AUTO_INCREMENT PRIMARY KEY, -> course_name VARCHAR(50) NOT NULL, -> credit TINYINT UNSIGNED DEFAULT 1 -> ); ERROR 1046 (3D000): No database selected mysql> mysql> -- 成绩表 mysql> CREATE TABLE scores ( -> score_id INT AUTO_INCREMENT PRIMARY KEY, -> student_id INT, -> course_id INT, -> score DECIMAL(5,2) CHECK (score BETWEEN 0 AND 100), -> exam_date DATE, -> FOREIGN KEY (student_id) REFERENCES students(student_id), -> FOREIGN KEY (course_id) REFERENCES courses(course_id) -> ); ERROR 1046 (3D000): No database selected mysql> mysql> -- 插入示例数据 mysql> INSERT INTO students (name, gender, birthdate, contact_phone) VALUES -> ('张三', '男', '2003-05-15', '13800138001'), -> ('李四', '女', '2002-11-23', '13900139002'); ERROR 1046 (3D000): No database selected mysql> mysql> INSERT INTO courses (course_name, credit) VALUES -> ('高等数学', 4), -> ('大学物理', 3), -> ('数据库原理', 2); ERROR 1046 (3D000): No database selected mysql> mysql> INSERT INTO scores (student_id, course_id, score, exam_date) VALUES -> (1, 1, 85.5, '2023-06-10'), -> (1, 3, 92.0, '2023-06-12'), -> (2, 2, 78.5, '2023-06-11'); ERROR 1046 (3D000): No database selected mysql> mysql> -- 查询示例 mysql> -- 查询学生基本信息 mysql> SELECT * FROM st
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值