# 数据库写操作失败修复指南 ## 问题现象 所有写操作(INSERT/UPDATE)返回 500 错误: - 课程创建 API 失败 - 课程更新 API 失败 - 租户创建 API 失败 读操作 API 正常工作。 ## 可能原因 1. **Flyway 迁移失败或锁定** - V10 迁移可能失败,导致数据库锁表 2. **数据库连接为只读模式** 3. **数据库用户权限不足** ## 解决方案 ### 方案一:清理 Flyway 迁移记录(推荐) 在 MySQL 客户端中执行以下命令: ```sql -- 1. 查看当前 Flyway 迁移历史 SELECT * FROM flyway_schema_history ORDER BY installed_rank DESC LIMIT 10; -- 2. 检查是否有 V10 失败记录 SELECT * FROM flyway_schema_history WHERE version = '10'; -- 3. 如果 V10 状态为 'FAILED',删除该记录 DELETE FROM flyway_schema_history WHERE version = '10' AND success = 0; -- 4. 验证清理结果 SELECT * FROM flyway_schema_history ORDER BY installed_rank DESC LIMIT 5; ``` 然后**重启后端服务**,Flyway 会自动重新执行迁移。 ### 方案二:检查数据库连接 ```sql -- 1. 检查当前数据库是否为只读模式 SELECT @@global.read_only; -- 应该返回 0(可读可写),如果返回 1 则是只读模式 -- 2. 检查当前用户权限 SHOW GRANTS FOR CURRENT_USER(); -- 确保有 INSERT, UPDATE, DELETE 权限 -- 3. 检查表是否被锁定 SHOW OPEN TABLES WHERE In_use > 0; ``` ### 方案三:检查后端日志 查看后端服务日志,寻找 500 错误的详细堆栈信息: ```bash # 如果后端使用日志文件 tail -100 /path/to/application.log # 或查看控制台输出 ``` ## 验证修复 修复后,执行以下测试: ```bash # 1. 获取 Token TOKEN=$(curl -s -X POST http://localhost:8080/api/v1/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"123456","role":"admin"}' | \ grep -o '"token":"[^"]*"' | cut -d'"' -f4) # 2. 测试课程创建 curl -s -X POST http://localhost:8080/api/v1/admin/courses \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TOKEN" \ -d '{ "name":"测试课程", "themeId":4, "gradeTags":"[\"小班\"]", "coreContent":"测试内容", "durationMinutes":25 }' # 期望返回:{"code":200,"message":"操作成功",...} ``` ## 前端修复 已修复前端字段名称不匹配问题: - `duration` → `durationMinutes` 修改文件:`reading-platform-frontend/src/views/admin/courses/CourseEditView.vue:320`