初始化提交
This commit is contained in:
104
README.md
Normal file
104
README.md
Normal 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;
|
||||
```
|
||||
Reference in New Issue
Block a user