
在软件开发中,Git 是版本控制的黄金标准。但在数据领域,我们往往缺乏同样的工具。Dolt是一个你可以像 Git 仓库一样进行 fork、clone、branch、merge、push 和 pull 的 SQL 数据库。

简单来说,Dolt 是 Git 和 MySQL 的结合体。它既是一个完整的 SQL 数据库(兼容 MySQL 协议),又是一个版本控制系统。你可以像连接任何 MySQL 数据库一样连接 Dolt 运行查询,也可以使用类似 Git 的命令行界面来管理数据的变更历史。
为什么需要 Dolt?
传统数据库难以追踪“谁在什么时候改了什么数据”,而文件系统版本控制又无法处理结构化数据的复杂性。Dolt 解决了这一痛点:
- 行级版本控制:不仅记录文件变化,更记录每一行数据的增删改。
- 分支与合并:支持数据分支开发,合并时自动处理冲突,就像合并代码一样。
- 时间旅行:随时回溯到历史上的任意提交点,查看或恢复数据。
- 协作友好:通过
push/pull轻松共享数据集,实现团队间的数据协作。 - AI 代理记忆:作为多代理工作流中的最佳数据库,Dolt 能为 AI Agent 提供可追溯、可分支的记忆存储。
核心功能:Git 命令,SQL 内核
Dolt 的 CLI 工具提供了与 Git 几乎一致的命令体验,同时通过系统表在 SQL 层面暴露版本控制能力。
🛠️ Dolt CLI 常用命令
$ dolt
Valid commands for dolt are
init - 创建空的 Dolt 数据仓库
status - 显示工作树状态
add - 添加表变更到暂存区
diff - 比较表差异
reset - 移除暂存区的表变更
commit - 记录变更到仓库
sql - 对仓库中的表运行 SQL 查询
sql-server - 启动 MySQL 兼容服务器
branch - 创建、列出、编辑、删除分支
checkout - 切换分支或从 HEAD 覆盖表
merge - 合并分支
conflicts - 查看和解决合并冲突
cherry-pick - 应用现有提交的变更
revert - 撤销特定提交的变更
clone - 克隆远程数据仓库
pull - 拉取并合并远程变更
push - 推送到远程仓库
blame - 显示每行数据最后修改的版本和作者
💡 SQL 层面的版本控制
Dolt 将版本控制功能嵌入 SQL,通过系统表和存储过程实现:
dolt_log:查看提交历史。dolt_diff_<tablename>:查看特定表的行级差异。dolt_status:查看当前工作集状态。call dolt_commit():提交变更。call dolt_reset():重置工作集。call dolt_undrop():撤销误删数据库的操作(是的,你没看错!)。
快速开始:5 分钟上手 Dolt
1. 安装 Dolt
Dolt 是一个约 103MB 的单二进制文件,安装极其简单。
Mac (Homebrew):
brew install dolt
Linux:
sudo bash -c 'curl -L https://github.com/dolthub/dolt/releases/latest/download/install.sh | bash'
Windows:
下载 MSI 安装包或使用 Chocolatey:choco install dolt
2. 配置用户信息
就像 Git 一样,你需要配置用户名和邮箱:
dolt config --global --add user.email "you@example.com"
dolt config --global --add user.name "Your Name"
3. 启动服务器并连接
Dolt 内置了 MySQL 兼容服务器。在一个终端启动:
dolt sql-server
在另一个终端使用客户端连接:
dolt -u root -p "" sql
4. 创建数据库与表
mysql> create database getting_started;
mysql> use getting_started;
mysql> create table employees (
id int,
last_name varchar(255),
first_name varchar(255),
primary key(id)
);
mysql> create table teams (
id int,
team_name varchar(255),
primary key(id)
);
5. 提交初始模式
使用 Dolt 特有的存储过程进行提交:
mysql> call dolt_add('employees', 'teams');
mysql> call dolt_commit('-m', 'Created initial schema');
-- 查看提交历史
mysql> select * from dolt_log;
6. 插入数据并查看差异
mysql> insert into employees values (0, 'Sehn', 'Tim');
mysql> insert into teams values (0, 'Engineering');
-- 查看未提交的变更
mysql> select * from dolt_status;
mysql> select * from dolt_diff_employees;
7. 时间旅行与后悔药
场景一:误删表?
mysql> drop table employees;
mysql> call dolt_reset('--hard'); -- 瞬间恢复!
场景二:误删整个数据库?
mysql> drop database getting_started;
mysql> call dolt_undrop(); -- 是的,Dolt 支持撤销删库!
场景三:回溯历史?
-- 查询特定提交时的数据
mysql> select * from employees as of 'ne182jemgrlm8jnjmoubfqsstlfi1s98';
生态系统:DoltHub 与 DoltLab
- DoltHub:类似于 GitHub,用于分享和发现公共 Dolt 数据库。免费托管公共数据。
- DoltLab:自托管版的 DoltHub,适合企业内部部署。
- Hosted Dolt:由官方托管的 Dolt 服务器服务。
- Doltgres:如果你更喜欢 PostgreSQL 协议,可以尝试 Dolt 的 PG 兼容版本(目前处于 Beta 阶段)。
相关导航


Refly

Turnitout-Humanizer

NotebookLM

Skill Seeker

Mem0

QMD





