简介:这份资源是芋道 ruoyi-vue-pro 企业级快速开发平台的配套数据库脚本合集,面向使用 Spring Boot + Vue 前后端分离架构进行中大型系统开发的 Java 工程师、数据库管理员及二次开发人员,帮助其快速搭建项目数据库结构、理解业务数据模型。压缩包共 34 个文件,以 22 个 zip 与 12 个 sql 为主,涵盖 bpm、crm、mall、erp、pay、member、ai、mp、report、go-view 等业务模块的建表与初始化脚本,以及 quartz 定时任务、ruoyi-vue-pro 主库等基础 SQL,整体约 143.22MB,按模块与日期版本归档,便于按需取用与版本比对。目前已有 1055 人学习下载。通过这批脚本,读者可快速还原各模块的库表结构、索引与初始化数据,掌握芋道项目的数据库设计思路,为系统部署、功能扩展与日常维护提供直接参考。
1. 拿到一份 SQL 脚本,先别急着往生产库灌
手里这份「宇道 ruoyi-vue-pro 最新最全 SQL」资源,本质是一套围绕 ruoyi-vue-pro 脚手架整理出来的数据库初始化与业务扩展脚本集合。ruoyi-vue-pro 是基于 Spring Boot + MyBatis-Plus + Vue 的后台管理框架,它的数据库层不是一张两张表能打发的——系统权限、租户、工作流、支付、商城、CRM、ERP 这些模块叠起来,表数量轻松过百。很多人第一次部署时卡在「表建不全、菜单不显示、定时任务报错」,根子往往就在 SQL 没跑对。
这份资源解决的就是这个痛点:把分散在各模块文档、issue、示例工程里的建表语句和初始数据归拢到一处,省去你一个个模块去翻源码找sql目录的功夫。适合正在做 ruoyi-vue-pro 二次开发的后端、需要快速搭一套后台原型的前端,以及被「菜单树对不上、字典查不到」折磨过的运维。但我要先把话说前头:SQL 脚本这东西,版本对不上就是灾难,下面按我实际拆包验证的顺序讲。
2. 拆开脚本看结构:表、数据、菜单到底怎么分层
2.1 先认清 ruoyi-vue-pro 的数据库分层逻辑
ruoyi-vue-pro 的 SQL 不是一坨,它按职责分了几类。你拿到资源后第一件事是分类,而不是直接source。常见做法是分成三层:
第一层是框架基础表,包括system_users、system_role、system_menu、system_dept、system_dict_type这些,任何模块都依赖它们。第二层是模块业务表,比如infra_*开头的基础设施表(代码生成、文件配置、定时任务)、bpm_*开头的工作流表、pay_*支付表、mall_*商城表。第三层是初始化数据,也就是INSERT语句,塞的是默认管理员、菜单树、字典项、租户信息。
这三层的执行顺序不能乱。基础表没建,业务表的外键约束会直接报错;初始化数据没跑,登录进去左侧菜单是空的,你会以为代码有问题,其实是数据没灌。
2.2 用一条命令快速盘点脚本内容
拿到.sql文件后,别用编辑器一行行翻。我一般先用grep把结构摸清楚:
# 统计建表语句数量,快速判断脚本覆盖范围 grep -c "CREATE TABLE" ruoyi-vue-pro-all.sql # 列出所有表名,按模块前缀归类 grep -oP "CREATE TABLE\s+\`?\K[a-z_]+" ruoyi-vue-pro-all.sql | sort # 单独看初始化数据涉及哪些表 grep -oP "INSERT INTO\s+\`?\K[a-z_]+" ruoyi-vue-pro-all.sql | sort -u第一条命令告诉你这份脚本建了多少张表,如果只有二三十张,那大概率只覆盖了基础模块,商城、ERP 那些得另找。第二条把表名抽出来,你能一眼看出模块前缀分布,system_、infra_、bpm_、pay_、mall_各占多少。第三条最关键——很多人只关心建表,忽略了INSERT,结果菜单不显示、字典为空、定时任务列表空白,全是初始化数据缺失导致的。
提示:如果
grep -P报错,说明你的环境不支持 Perl 正则,换成grep -o "CREATE TABLE [a-z_]*"再手动处理。
2.3 版本对齐:为什么不能拿旧脚本灌新代码
ruoyi-vue-pro 迭代很快,表结构会变。我踩过最典型的一次坑:用了一份半年前的 SQL 跑最新代码,启动没报错,但进「代码生成」模块时页面 500。查日志发现infra_codegen_table表少了一个front_type字段,MyBatis-Plus 映射时找不到列直接抛异常。
判断版本是否匹配,看两个地方。一是脚本里有没有system_users表的tenant_id字段——带租户功能的版本一定有。二是看infra_*表的数量,新版基础设施模块表更多。如果脚本里连infra_codegen_table都没有,那这份脚本对应的是很早期的版本,直接放弃,别硬改。
-- 快速检查关键字段是否存在,判断脚本新旧 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'system_users' AND COLUMN_NAME IN ('tenant_id', 'deleted', 'creator');这条查询在已建库的环境里跑,能看出system_users有没有租户字段和逻辑删除字段。如果tenant_id缺失,说明脚本对应的是无租户版本,而你手上的代码如果开了租户模式,跑起来必然出问题。
3. 导入实操:从空库到能登录的完整链路
3.1 建库与字符集设定
ruoyi-vue-pro 默认用 MySQL,字符集必须是utf8mb4,排序规则用utf8mb4_general_ci或utf8mb4_unicode_ci。别用utf8,那是三字节的,存 emoji 或某些生僻字会炸。
-- 创建数据库,字符集和排序规则一次到位 CREATE DATABASE `ruoyi-vue-pro` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; -- 切换到这个库 USE `ruoyi-vue-pro`;建库时如果排序规则选错,后面改起来很麻烦——要ALTER TABLE逐张表改,上百张表能改到你怀疑人生。所以这一步别偷懒。
3.2 分步导入,别一把梭
我见过太多人直接source ruoyi-vue-pro-all.sql,然后卡在某个报错上,前面跑了一半,后面全断,库处于半死不活状态。正确做法是先看脚本里有没有DROP TABLE IF EXISTS,有的话说明可以重复执行,没有的话第一次跑完再跑就报「表已存在」。
# 方式一:命令行导入,适合脚本不大时 mysql -u root -p ruoyi-vue-pro < ruoyi-vue-pro-all.sql # 方式二:进 MySQL 后用 source,方便看报错位置 mysql -u root -p USE `ruoyi-vue-pro`; SOURCE /path/to/ruoyi-vue-pro-all.sql;如果脚本很大(超过 50MB),命令行导入可能超时,改 MySQL 配置里的max_allowed_packet:
-- 临时调大,重启失效;永久生效要改 my.cnf SET GLOBAL max_allowed_packet = 256 * 1024 * 1024;导入过程中如果报ERROR 1215: Cannot add foreign key constraint,八成是表创建顺序不对——子表先于父表建了。解决办法是找到脚本里SET FOREIGN_KEY_CHECKS那行,确保导入前设为 0,导入完再设回 1。
SET FOREIGN_KEY_CHECKS = 0; -- 这里执行你的导入 SET FOREIGN_KEY_CHECKS = 1;3.3 验证导入结果:三张表定生死
导入完别急着启动项目,先跑三条查询验证。第一条查管理员账号在不在:
SELECT id, username, nickname, status FROM system_users WHERE username = 'admin';status应该是 0(正常),如果查不到记录,说明初始化数据没跑进去,登录会提示「账号不存在」。第二条查菜单树根节点:
SELECT COUNT(*) AS menu_count FROM system_menu WHERE parent_id = 0;这个数一般不为零,如果返回 0,登录后左侧菜单空白。第三条查租户表(如果代码开了租户模式):
SELECT id, name, status FROM system_tenant;没有租户记录的话,登录时租户下拉框是空的,同样进不去。这三条都过了,再启动 Spring Boot 应用,基本能一次点亮。
4. 避坑排查:导入 SQL 时最容易翻车的五个地方
4.1 现象:导入报「Unknown collation: utf8mb4_0900_ai_ci」
原因:脚本是在 MySQL 8.0 环境导出的,用了 8.0 默认的utf8mb4_0900_ai_ci排序规则,而你本地是 MySQL 5.7,不认这个规则。
解决:用文本编辑器全局替换,把utf8mb4_0900_ai_ci换成utf8mb4_general_ci,utf8mb4_0900_ai_ci相关的字符集声明也一并换掉。替换前先备份原文件,别在原文件上直接改。
4.2 现象:表建好了,但启动报「Table 'xxx' doesn't exist」
原因:脚本只覆盖了部分模块,你代码里引用了未建表的模块。比如代码里开了工作流,但 SQL 里没有bpm_*表。
解决:先确认代码application.yaml里哪些模块的enabled是true,然后对照脚本里有没有对应前缀的表。缺哪个模块就去该模块的源码目录下找sql文件夹单独补。别想着自己手写建表语句,字段类型和索引很容易对不上。
4.3 现象:登录成功但菜单只有一两个,大部分功能看不到
原因:system_menu表的数据不完整,或者system_role_menu关联表没数据。ruoyi-vue-pro 的菜单是角色绑定的,光有菜单记录不够,还得有角色和菜单的关联。
解决:查system_role_menu有没有记录:
SELECT COUNT(*) FROM system_role_menu;如果是 0,说明初始化数据里漏了关联关系。从脚本里搜INSERT INTO system_role_menu,单独把这段拎出来跑一遍。跑之前先清空该表,避免主键冲突。
4.4 现象:定时任务页面报错,提示找不到infra_job表
原因:infra模块的表没建全。ruoyi-vue-pro 把定时任务、代码生成、文件配置都归在infra下,这些表在早期版本里可能叫别的名字,或者根本没包含在基础脚本里。
解决:确认脚本里infra_开头的表有几张。正常应该有infra_job、infra_codegen_table、infra_codegen_column、infra_file_config、infra_file等。缺的话从对应版本的源码sql目录补。
4.5 现象:导入到一半卡住,日志显示「Lock wait timeout exceeded」
原因:库里有未提交的事务占着锁,或者导入时并发写了同一张表。
解决:先查有没有长事务:
SELECT * FROM information_schema.innodb_trx WHERE TIME_TO_SEC(TIMEDIFF(NOW(), trx_started)) > 60;有的话KILL掉对应线程,然后重新导入。导入时确保没有其他程序在连这个库,尤其是你本地已经启动了一半的应用。
5. 进阶用法:把 SQL 脚本变成可版本管理的迁移文件
直接跑一个大 SQL 文件,在个人开发环境没问题,但团队协作时就是灾难——你不知道谁改了哪张表,也没法回滚。我现在的习惯是把这份「最全 SQL」拆成 Flyway 或 Liquibase 的迁移脚本,按版本号命名,每次变更一个文件。
以 Flyway 为例,目录结构长这样:
src/main/resources/db/migration/ ├── V1.0.0__init_system_tables.sql ├── V1.0.1__init_infra_tables.sql ├── V1.0.2__init_bpm_tables.sql ├── V1.0.3__init_mall_tables.sql └── V1.0.4__init_data.sql拆分逻辑是按模块和「建表 / 初始化数据」分离。V1.0.0到V1.0.3只放CREATE TABLE,V1.0.4放所有INSERT。这样新环境启动时 Flyway 自动按顺序执行,已执行过的版本不会重复跑,团队里每个人拿到的表结构完全一致。
配置上,Spring Boot 集成 Flyway 只需要加依赖和几行配置:
spring: flyway: enabled: true locations: classpath:db/migration baseline-on-migrate: true validate-on-migrate: truebaseline-on-migrate在已有数据的库上首次启用时很有用,它会建一张flyway_schema_history表记录基线,不会因为库里有表就报错。validate-on-migrate会在启动时校验脚本校验和,防止有人偷偷改了已执行的脚本。
拆完之后有个额外好处:当 ruoyi-vue-pro 官方更新了表结构,你只需要新增一个V1.0.5__alter_xxx.sql,而不是重新跑整个大脚本。回滚也简单,Flyway 支持 undo 脚本(社区版需配合插件),或者你手动写一个反向ALTER。
注意:拆分时
CREATE TABLE语句里的外键约束要留意执行顺序,父表必须先于子表。Flyway 按版本号顺序执行,所以命名时把基础表放前面,业务表放后面。
从那以后我每次拿到新的 SQL 资源包,第一件事就是拆成迁移文件再入库,再也没出现过「本地能跑、同事跑不起来」的情况。希望帮到你。
本文还有配套的精品资源,点击获取