Python脚本批量调整MySQL表自增主键起始值(含完整代码)

使用 Python 自动批量修改 MySQL 数据库中所有带有自增主键的表的自增起始值。非常适合数据库维护和运维新人,简单易懂,附完整代码。


什么是自增主键?

MySQL 中的自增主键(AUTO_INCREMENT)是一种自动生成唯一编号的字段,常用于表的主键,保证每条记录有唯一标识。默认情况下,它会从1开始递增。


为什么要批量调整自增起始值?

  • 避免主键冲突:比如多张表或者多个库合并时,想让自增主键跳跃一定数值避免冲突。
  • 数据迁移和分库分表:预留一定偏移量,为以后扩展做准备。
  • 数据清理后重设起点

手动一张表一张表改,非常麻烦且易出错,于是我们用 Python 自动完成。


脚本功能

  • 查询当前数据库中所有带自增主键的表
  • 找出每个表自增字段的最大值
  • 将自增起始值设置为“最大值 + 偏移量”
  • 自动提交修改,打印执行结果

环境准备

  1. 安装 Python(推荐3.x版本)

  2. 安装 PyMySQL 库,命令行执行:

    pip install pymysql
    
  3. 准备好 MySQL 数据库连接信息


完整代码

import pymysql

# === 配置区 ===
DB_CONFIG = {
  "host": "localhost",  # 数据库地址,一般是localhost或IP
  "port": 3306,  # 数据库端口,MySQL默认3306
  "user": "root",  # 数据库用户名
  "password": "root",  # 数据库密码,注意安全
  "database": "vue_db",  # 要操作的数据库名称
  "charset": "utf8mb4"  # 数据库字符编码,utf8mb4支持更多字符
}
OFFSET = 100  # 自增主键起始值的偏移量,比如当前最大ID加100


# 获取所有带有自增字段的表和字段名
def get_auto_increment_tables(conn, db_name):
  with conn.cursor() as cursor:
    # 查询 information_schema.columns 表,找出当前数据库中所有extra字段是auto_increment的列(即自增列)
    sql = """
      SELECT table_name, column_name
      FROM information_schema.columns
      WHERE table_schema = %s AND extra = 'auto_increment';
    """
    cursor.execute(sql, (db_name,))
    # 返回所有满足条件的表名和对应自增字段名
    return cursor.fetchall()


# 获取指定表自增字段的当前最大值
def get_max_id(conn, table, column):
  with conn.cursor() as cursor:
    try:
      # 查询指定表和列的最大ID值
      cursor.execute(f"SELECT MAX(`{column}`) FROM `{table}`;")
      result = cursor.fetchone()
      # 如果查询结果为None,则返回0,否则返回最大值
      return result[0] or 0
    except Exception as e:
      print(f"[!] 查询 {table} 最大值出错:{e}")
      return 0


# 修改表的自增起始值
def alter_auto_increment(conn, table, new_value):
  with conn.cursor() as cursor:
    try:
      # 执行ALTER TABLE命令,设置新的AUTO_INCREMENT起始值
      cursor.execute(f"ALTER TABLE `{table}` AUTO_INCREMENT = {new_value};")
      print(f"[✓] 设置 {table} 的 AUTO_INCREMENT 为 {new_value}")
    except Exception as e:
      print(f"[✗] 设置 {table} 的 AUTO_INCREMENT 失败:{e}")


# 主程序入口
def main():
  # 建立数据库连接
  conn = pymysql.connect(**DB_CONFIG)
  try:
    # 获取所有带自增字段的表和对应字段
    tables = get_auto_increment_tables(conn, DB_CONFIG["database"])
    print(f"共找到 {len(tables)} 个包含 AUTO_INCREMENT 的表。")

    # 遍历所有表,分别获取最大ID并设置新的起始值
    for table_name, column_name in tables:
      max_id = get_max_id(conn, table_name, column_name)  # 获取当前最大ID
      new_auto_increment = max_id + OFFSET  # 计算新的起始值
      alter_auto_increment(conn, table_name, new_auto_increment)  # 修改自增起始值

    # 提交所有修改
    conn.commit()
    print("所有自增主键已处理完毕。")
  finally:
    # 关闭数据库连接,释放资源
    conn.close()


if __name__ == "__main__":
  main()

如何使用?

  1. 将上述代码保存为 adjust_auto_increment.py 文件。

  2. 修改 DB_CONFIG 配置,填写自己的数据库连接信息。

  3. 根据需求调整 OFFSET 偏移量。

  4. 运行脚本:

    python adjust_auto_increment.py
    
  5. 观察终端输出,确认所有表的自增主键已成功调整。


注意事项

  • 数据库权限:确保 MySQL 用户有修改表结构的权限。
  • 备份数据:运行前务必备份数据库,避免意外导致数据损坏。
  • 连接信息安全:避免泄漏密码,生产环境可使用环境变量等方式保护。
  • 大数据表操作谨慎:若表非常大,调整操作可能会稍微影响性能。

总结

通过这段简单的 Python 脚本,实现了对 MySQL 多张表自增主键起始值的批量调整,避免了手工修改的繁琐和风险。非常适合快速上手数据库维护任务,也可作为自动化运维工具的一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱宇阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值