# compare_sql **Repository Path**: null1970/compare_sql ## Basic Information - **Project Name**: compare_sql - **Description**: sql比对 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-23 - **Last Updated**: 2025-08-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # compare_sql ## 项目简介 本项目用于对比两个数据库(如 MySQL、达梦8 DM8)不同环境下的 SQL 文件(如 source.sql 和 target.sql),自动生成结构变更 SQL(如 update.sql),支持字段、主键、索引、注释等多种差异。程序会生成源(source)向目标(target)同步需要的更新SQL。 ## 主要特性 - 支持 MySQL、达梦8(DM8)数据库 - 兼容有/无 schema 的表名 - 字段注释支持字段内 `COMMENT` 和单独 `COMMENT ON COLUMN` 语法 - 支持主键、唯一索引、普通索引的检测与变更 - 新表自动保留原始 `CREATE TABLE` 语句,最大程度兼容原始语法(如自增、分区、存储等) - 变更 SQL 自动分组归类,输出清晰 ## 目录结构 ``` compare_sql/ compare_sql.py # 主程序入口 config.ini # 配置文件,指定SQL路径和数据库类型 db_strategy/ # 各数据库的SQL生成策略 parser_strategy/ # 各数据库的SQL解析策略 util/ # 工具函数 sql/ # 存放各环境SQL文件 update.sql # 自动生成的变更SQL ``` ## 配置说明 编辑 `config.ini`,示例: ``` [sql] # 源 SQL 文件路径(source),目标 SQL 文件路径(target) # 程序会将源(source)同步到目标(target)中 source=sql/MySQL/dev.sql target=sql/MySQL/pro.sql output=update.sql # 数据库类型:MySQL,DM8 dbtype=MySQL ``` ## 使用方法 1. 准备好 source.sql 和 target.sql,配置好 config.ini。 2. 运行主程序: ```bash python compare_sql.py ``` 3. 生成的 update.sql 即为结构变更SQL(将 source 中的结构同步到 target 中)。 ## 解析与生成说明 - 新表:直接使用 source.sql 中的原始 `CREATE TABLE` 语句,完整保留所有细节。 - 字段、主键、索引、注释等变更:自动检测差异,生成对应的 ALTER/COMMENT 语句。 - 支持字段注释、主键、唯一索引、普通索引、schema、复杂表属性等。 ## 适用场景 - MySQL、达梦8等数据库的结构变更自动化 - 需要最大程度保留原始SQL语法的场景 - 兼容国产数据库特殊语法 ## 反馈与贡献 如有问题或建议,欢迎提 issue 或 PR!