# 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; ```