# 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; ```