初始化提交

This commit is contained in:
2026-01-05 15:13:55 +08:00
commit 25c03d643f
3 changed files with 321 additions and 0 deletions

104
README.md Normal file
View File

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