# 数据架构实验室

这个项目把两类实验分开：默认 Maven 测试使用 H2，只验证 MyBatis 对象和执行链；`sql/` 使用真实 MySQL 8.4，验证执行计划、InnoDB 锁与事务。H2 不能证明 MySQL 的优化器、MVCC 或崩溃恢复行为。

## 运行 MyBatis 实验

```bash
mvn test
```

要求 JDK 21+ 和 Maven 3.9+。测试不要求 Docker。

## 运行 MySQL 实验

```bash
docker compose up -d --wait
docker compose exec mysql mysql -ulab -plab architecture_lab
```

进入客户端后可执行：

```sql
SOURCE /docker-entrypoint-initdb.d/02-index-and-explain.sql;
SOURCE /docker-entrypoint-initdb.d/03-transaction-lab.sql;
SOURCE /docker-entrypoint-initdb.d/04-observability.sql;
```

初始化脚本会为本地 `lab` 用户授予观测所需的 `PROCESS` 权限。这个授权只用于隔离实验环境，生产账号必须按最小权限重新设计。

事务和死锁脚本标有“会话 A / 会话 B”，需要打开两个终端按注释顺序执行。结束后运行 `docker compose down`；如需连同实验数据一起删除，明确确认后再运行 `docker compose down -v`。

## 版本边界

- MyBatis 固定为 3.5.19。
- MySQL 固定为 8.4.12 LTS。
- H2 只作为快速测试替身，不是 MySQL 兼容性认证。
