25c03d643fed2d40e04d1ba71677d676779069d0
SQL差异比较工具
功能描述
该工具用于比较两个由mysqldump生成的SQL文件,找出表结构差异,并自动生成update.sql脚本。
使用场景
- 同步两个数据库的结构差异
- 项目A可能是旧数据库,项目B创建了新的字段和表
- 当给项目A更新服务端时,确保数据库结构一致
工作原理
- 读取SQL文件:从
sql文件夹中获取两个SQL文件 - 解析表结构:提取每个SQL文件中的表结构信息
- 比较差异:找出新增的表和新增的字段
- 生成脚本:根据差异生成对应的
CREATE TABLE和ALTER TABLE语句 - 输出结果:将生成的SQL脚本保存到
out/update.sql文件中
使用方法
1. 准备SQL文件
使用mysqldump命令生成两个数据库的结构文件:
# 导出旧数据库结构
mysqldump -u root -p -d old_database > sql/old.sql
# 导出新数据库结构
mysqldump -u root -p -d new_database > sql/new.sql
2. 运行脚本
python sql_diff.py
3. 查看结果
生成的update.sql文件将保存在out文件夹中,包含:
- 新增表的
CREATE TABLE语句 - 新增字段的
ALTER TABLE语句
项目结构
sql_utils/
├── sql/ # 存放待比较的SQL文件
├── out/ # 存放生成的update.sql文件
├── sql_diff.py # 主程序文件
└── README.md # 项目说明文档
代码说明
主要函数
- get_sql_files():获取sql文件夹中的SQL文件
- parse_sql_file(file_path):解析SQL文件,提取表结构信息
- compare_tables(old_tables, new_tables):比较两个表结构字典,找出差异
- generate_update_sql(old_file, new_file, diff):根据差异生成update.sql语句
- main():主函数,协调各个步骤
依赖
- Python 3.x
- 标准库:os, re, datetime
注意事项
- 确保
sql文件夹中只有两个SQL文件 - 建议使用文件名中的
old关键字标识旧数据库文件,方便程序自动识别 - 该工具仅比较表结构,不比较数据
- 生成的SQL脚本需要人工审核后再执行
示例
输入
sql/old.sql(旧数据库结构)
sql/new.sql(新数据库结构)
输出
-- SQL差异更新脚本
-- 生成时间: 2023-01-01 12:00:00
-- 比较文件: old.sql (旧) -> new.sql (新)
-- 新增表
CREATE TABLE `new_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 新增字段
ALTER TABLE `existing_table` ADD COLUMN `new_field` varchar(255) DEFAULT NULL;
Description
Languages
Python
100%