sqldef:一款免费的数据库变更管理工具

server/2025/3/15 5:09:35/

应用程序的升级通常伴随着数据库表结构的变更,为了维护各种环境的数据库变更,我们通常需要引入 Liquibase 或者 Flyaway 这样的数据库版本控制工具。不过,这类工具通常需要绑定某种编程语言,例如 Java;这次我们介绍一个新的工具:sqldef。

sqldef 是一个用于管理数据库模式结构的工具,可以用于比较两个数据库中的表结构差异并且生成可执行的 DDL 脚本。

在这里插入图片描述

sqldef 提供了命令行工具、WASM、NodeJS 等运行方式,支持的数据库包括 MySQL、PostgreSQL、SQLite 以及 SQL Server。

下载安装

sqldef 支持跨平台,包括 Linux、Windows、macOS。输入以下网址可以下载编译好的二进制文件:

https://github.com/sqldef/sqldef/releases

基于不同的操作系统和数据库下载对应的文件,例如 Windows 平台的 MySQL 数据库,文件名为 mysqldef_windows_amd64.zip。下载完成后解压得到可执行文件 mysqldef.exe。

PostgreSQL 对应的文件名为 psqldef_xxx,SQLite 对应的文件名为 sqlite3def_xxx,SQL Server 对应的文件名为 mssqldef_xxx。

使用案例

下面我们以 MySQL 数据库为例,演示以下如何使用 mysqldef:

# 确保 mysql 客户端可以连接数据库
PS C:\Users\bell-> mysql -uroot -p test -e "select 1;"
Enter password: ********
+---+
| 1 |
+---+
| 1 |
+---+# 使用 mysqldef 工具导出数据库 test 的表结构
PS C:\Users\bell-> .\mysqldef.exe /u root /p xxxxxx /export test
CREATE TABLE `user` (`id` bigint unsigned NOT NULL AUTO_INCREMENT,`name` varchar(128) DEFAULT 'NA',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;# 保存表结构到文件
PS C:\Users\bell-> .\mysqldef.exe /u root /p xxxxxx /export test > mysql_test.sql

其中,/u 用于指定用户名;/p 用户指定密码,需要将 xxxxxx 替换为实际值; /export 表示导出表结构;test 是数据库名称。更多的参数介绍可以通过帮助信息查看:

PS C:\Users\bell-> .\mysqldef.exe /help
Usage:C:\Users\bell-\mysqldef.exe [OPTIONS] [database|current.sql] < desired.sqlApplication Options:/u, /user:user_name               MySQL user name (default: root)/p, /password:password            MySQL user password, overridden by $MYSQL_PWD/h, /host:host_name               Host to connect to the MySQL server (default: 127.0.0.1)/P, /port:port_num                Port used for the connection (default: 3306)/S, /socket:socket                The socket file to use for connection/ssl-mode:ssl_mode            SSL connection mode(PREFERRED,REQUIRED,DISABLED). (default: PREFERRED)/ssl-ca:ssl_ca                File that contains list of trusted SSL Certificate Authorities/password-prompt              Force MySQL user password prompt/enable-cleartext-plugin      Enable/disable the clear text authentication plugin/file:sql_file                Read desired SQL from the file, rather than stdin (default: -)/dry-run                      Don't run DDLs but just show them/export                       Just dump the current schema to stdout/enable-drop-table            Enable destructive changes such as DROP (enable only table drops)/skip-view                    Skip managing views (temporary feature, to be removed later)/before-apply:                Execute the given string before applying the regular DDLs/config:                      YAML file to specify: target_tables, skip_tables, algorithm, lock/help                         Show this help/version                      Show this version

打开生成的 mysql_test.sql 文件,增加一个字段 created_at 和索引 index_name:

CREATE TABLE `user` (`id` bigint unsigned NOT NULL AUTO_INCREMENT,`name` varchar(128) DEFAULT 'NA',`created_at` DATETIME NOT NULL, -- 增加一个字段PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;-- 增加一个索引
CREATE INDEX user_name_idx USING BTREE ON test.`user` (name);

然后就可以运行 mysqldef 比较修改前后的表结构差异:

PS C:\Users\bell-> .\mysqldef.exe /u root /p xxxxxx /dry-run /file mysql_test.sql test
-- dry run --
ALTER TABLE `user` ADD COLUMN `created_at` datetime NOT NULL AFTER `name`;
CREATE INDEX user_name_idx USING BTREE ON test.`user` (name);

其中,/dry-run 表示只显示要执行的 DDL,但是不会实际执行。

我们去掉 /dry-run 参数,针对数据库执行差异 DDL:

PS C:\Users\bell-> .\mysqldef.exe /u root /p xxxxxx /file mysql_test.sql test
-- Apply --
ALTER TABLE `user` ADD COLUMN `created_at` datetime NOT NULL AFTER `name`;
CREATE INDEX user_name_idx USING BTREE ON test.`user` (name);

此时,数据库中已经应用了最新的 DDL,修改表结构。再次执行以上命令:

PS C:\Users\bell-> .\mysqldef.exe /u root /p root2024 /file mysql_test.sql test
-- Nothing is modified --

显示数据库结构没有更改。

其他数据库的示例可以参考 GitHub 上的项目文档:

https://github.com/sqldef/sqldef?tab=readme-ov-file

文章来源:https://blog.csdn.net/horses/article/details/146215846
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/server/175068.html

相关文章

kotlin与MVVM的结合使用总结(二)

在 MVVM&#xff08;Model - View - ViewModel&#xff09;架构中&#xff0c;M 层即 Model 层&#xff0c;主要负责数据的管理、存储和获取&#xff0c;它与业务逻辑和数据处理相关。在 Kotlin 中实现 MVVM 的 M 层&#xff0c;通常会涉及数据类的定义、数据的本地存储与远程获…

【蓝桥杯】第15届c++B组--R格式

问题描述 小蓝最近在研究一种浮点数的表示方法&#xff1a;RR 格式。对于一个大于 0 的浮点数 dd&#xff0c;可以用 RR 格式的整数来表示。给定一个转换参数 nn&#xff0c;将浮点数转换为 RR 格式整数的做法是: 将浮点数乘以 2n2n&#xff1b; 四舍五入到最接近的整数。 …

AWS Bedrock全托管接入国产大模型DeepSeek-R1[内涵免费使用DeepSeek-R1满血版]

国产大模型DeepSeek-R1全面登陆AWS Bedrock&#xff1a;企业级生成式AI的新标杆 一、技术突破&#xff1a;全托管服务正式上线 北京时间2025年3月11日&#xff0c;亚马逊云科技宣布国产大模型DeepSeek-R1正式成为首个在Amazon Bedrock平台提供全托管服务的中文大语言模型。此次…

侯捷 C++ 课程学习笔记:C++ 新标准11/14

演进、环境与资源 C2.0 &#xff08;C11/14&#xff09;新特性 语言&#xff08;只谈新东西&#xff09;&#xff0c;需要具备&#xff0c;C 语法和语意的基础 C Standard 之演化 C 98&#xff08;1.0&#xff09;、C 03&#xff08;TR1&#xff0c;Technical Report 1&…

Qt/C++音视频开发82-系统音量值获取和设置/音量大小/静音

一、前言 在音视频开发中&#xff0c;音量的控制分两块&#xff0c;一个是控制播放器本身的音量&#xff0c;绝大部分场景都是需要控制这个&#xff0c;这个不会影响系统音量的设置。还有一种场景是需要控制系统的音量&#xff0c;因为播放器本身的音量是在系统音量的基础上控…

MySQL中有哪几种锁?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL中有哪几种锁&#xff1f;】面试题。希望对大家有帮助&#xff1b; MySQL中有哪几种锁&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中&#xff0c;锁是用来控制并发访问的机制&#xff0c;确…

Prompt工程:大模型沟通指南(人工智能到大模型)

文章目录 人工智能到大模型机器学习深度学习大模型 Prompt工程&#xff1a;大模型沟通的桥梁 在人工智能的广袤领域中&#xff0c;大模型无疑是最为璀璨的明珠之一。它仿佛是一座连接人类与人工智能的桥梁&#xff0c;让我们能够更加深入地探索和利用人工智能的强大能力。而要实…

58.Harmonyos NEXT 图片预览组件架构设计与实现原理

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; Harmonyos NEXT 图片预览组件架构设计与实现原理 文章目录 Harmonyos NEXT 图片预览组件架构设计与实现原理效果预览一、组件架构概述1. 核心组件层…