Files
2026-10-20 21:19:44 +08:00

105 lines
4.2 KiB
Markdown

# 2.4 数据库初始化
:::tip 概述
项目以 MySQL 为规范基准数据库,五方言定稿脚本统一存放于 `document/{数据库}/easygoadmin.goframe.elevue.sql`。本节演示最短初始化路径与验证方法。
:::
## 定稿脚本目录
```text
document/
├── mysql/easygoadmin.goframe.elevue.sql # MySQL 定稿(规范基准,人工导入维护)
├── postgresql/easygoadmin.goframe.elevue.sql # PostgreSQL 定稿(由基准转换,待人工校对)
├── sqlserver/easygoadmin.goframe.elevue.sql # SQL Server 定稿(由基准转换,待人工校对)
├── oracle/easygoadmin.goframe.elevue.sql # Oracle 定稿(由基准转换,待人工校对)
└── sqlite/easygoadmin.goframe.elevue.sql # SQLite 定稿(由基准转换,待人工校对)
```
::: warning 定稿以 MySQL 为准
五份脚本中 **MySQL 版为规范基准**,后四份由基准转换生成,尚待人工校对。生产使用非 MySQL 库前,请人工核对后四份脚本(尤其是唯一索引 `uk_*` 与列注释枚举)。
:::
## 方式一:导入 MySQL 定稿脚本(推荐)
```sh
# 创建库(注意库名含点,utf8mb4)
mysql -uroot -p -e "CREATE DATABASE \`easygoadmin.goframe.elevue\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
# 导入定稿脚本(含 25 张表 + 索引 + 种子数据:超管账号/菜单/字典/参数/租户等)
mysql -uroot -p easygoadmin.goframe.elevue < document/mysql/easygoadmin.goframe.elevue.sql
```
导入后验证:
```sql
SHOW TABLES; -- 25 张 goframe_ 前缀表
SELECT username FROM goframe_user WHERE id=1; -- admin
```
## 其他数据库初始化
PostgreSQL 示例:
```sh
createdb -U postgres easygoadmin.goframe.elevue
psql -U postgres -d easygoadmin.goframe.elevue -f document/postgresql/easygoadmin.goframe.elevue.sql
```
SQLite 示例(文件库,无需建库):
```sh
sqlite3 easygoadmin.db < document/sqlite/easygoadmin.goframe.elevue.sql
```
SQL Server / Oracle 使用对应客户端工具执行 `document/sqlserver/`、`document/oracle/` 下脚本。
导入后修改 `manifest/config/config.yaml` 的 `database.default.type/link` 切换连接(五驱动已在 main.go 预注册,改配置即切换)。
## 从现有库迁移
已有 MySQL 数据要搬到其他方言,**不要手工导 SQL**,使用内置整库迁移器(结构 + 注释 + 索引 + 数据 + 序列一体搬运,五方言互迁):
```sh
go run ./cmd/migrator \
-src-type=mysql -src-host=127.0.0.1 -src-hostport=3306 \
-src-database=easygoadmin.goframe.elevue -src-username=root -src-password=root \
-dst-type=pgsql -dst-host=127.0.0.1 -dst-hostport=5432 \
-dst-database=easygoadmin.goframe.elevue -dst-username=postgres -dst-password=123456 \
-drop-target-first
```
详见 [7.6 数据库迁移工具](../tools/db-migrate) 与 [11.3 数据库迁移](../deploy/db-migrate)。仓库保留有实测日志:`document/数据迁移PostgreSQL版本日志.txt`、`数据迁移SqlServer版本日志.txt`、`数据迁移Sqlite版本日志.txt`。
## 表结构通用规范
全部 25 张表统一以下规范(建新表必须遵循,详见 [3.2 数据库建表](../guide/database)):
```sql
-- 统一审计列(25 表齐备)
id int NOT NULL AUTO_INCREMENT, -- 主键:数据库自增(禁用雪花)
create_user varchar(50), -- 创建人
create_time datetime DEFAULT (now()), -- 创建时间
update_user varchar(50), -- 更新人
update_time datetime DEFAULT (now()), -- 更新时间
del_flag int DEFAULT 0, -- 软删:0-正常 1-已删除
-- 租户级表(9 张)另有:
tenant_id int DEFAULT 0 -- 0=平台级
```
## 验证数据完整性
```sql
-- 种子超管与角色
SELECT u.username, r.code FROM goframe_user u
JOIN goframe_user_role ur ON ur.user_id=u.id
JOIN goframe_role r ON r.id=ur.role_id; -- admin / ROLE_SUPER_ADMIN
-- 字典种子
SELECT code FROM goframe_dict; -- role_data_scope 等
-- 唯一索引检查(13 个)
SELECT TABLE_NAME, INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA='easygoadmin.goframe.elevue' AND INDEX_NAME LIKE 'uk_%'
GROUP BY TABLE_NAME, INDEX_NAME;
```