基本完成,修复细节
This commit is contained in:
157
tradeCattle/CAR_NUMBER_FIELD_REMOVAL_GUIDE.md
Normal file
157
tradeCattle/CAR_NUMBER_FIELD_REMOVAL_GUIDE.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# member_driver 表 car_number 字段删除指南
|
||||
|
||||
## 🔍 问题诊断
|
||||
|
||||
### 错误现象
|
||||
```
|
||||
java.sql.SQLSyntaxErrorException: Unknown column 'md.car_number' in 'field list'
|
||||
```
|
||||
|
||||
这个错误在执行 `DeliveryMapper.insert` 时出现,但 INSERT SQL 本身并不包含 `md.car_number`。
|
||||
|
||||
### 可能原因
|
||||
|
||||
1. **数据库触发器** - delivery 表的 INSERT/UPDATE 触发器可能引用了 member_driver.car_number
|
||||
2. **数据库视图** - 某个视图可能包含 member_driver.car_number
|
||||
3. **字段仍然存在** - member_driver 表中 car_number 字段尚未被删除
|
||||
|
||||
## 📋 解决步骤
|
||||
|
||||
### 步骤 1: 执行诊断脚本
|
||||
|
||||
在 MySQL 中执行 `remove_car_number_from_member_driver.sql` 脚本的**诊断部分**:
|
||||
|
||||
```bash
|
||||
# 连接到数据库
|
||||
mysql -u root -p cattle_trade
|
||||
|
||||
# 执行诊断部分(前 46 行)
|
||||
source C:/cattleTransport/tradeCattle/remove_car_number_from_member_driver.sql
|
||||
```
|
||||
|
||||
### 步骤 2: 分析诊断结果
|
||||
|
||||
#### 2.1 检查字段是否存在
|
||||
如果看到 `car_number字段存在数量 = 1`,说明字段还在数据库中。
|
||||
|
||||
#### 2.2 检查触发器
|
||||
重点关注:
|
||||
- **delivery 表的触发器** - 可能在 INSERT 时查询 member_driver.car_number
|
||||
- **member_driver 表的触发器** - 可能在更新时引用 car_number
|
||||
|
||||
#### 2.3 检查视图
|
||||
如果有视图包含 `md.car_number`,需要先删除或修改视图。
|
||||
|
||||
### 步骤 3: 删除触发器(如果存在)
|
||||
|
||||
如果发现触发器引用 `md.car_number`,执行:
|
||||
|
||||
```sql
|
||||
-- 删除有问题的触发器
|
||||
DROP TRIGGER IF EXISTS trigger_name;
|
||||
|
||||
-- 示例:如果发现 delivery_after_insert 触发器有问题
|
||||
-- DROP TRIGGER IF EXISTS delivery_after_insert;
|
||||
```
|
||||
|
||||
### 步骤 4: 删除字段
|
||||
|
||||
确认没有依赖后,执行字段删除:
|
||||
|
||||
```sql
|
||||
-- 删除 car_number 字段
|
||||
ALTER TABLE member_driver DROP COLUMN IF EXISTS car_number;
|
||||
|
||||
-- 验证删除
|
||||
DESC member_driver;
|
||||
```
|
||||
|
||||
### 步骤 5: 重启服务
|
||||
|
||||
```powershell
|
||||
# 1. 清理编译缓存
|
||||
cd C:\cattleTransport\tradeCattle
|
||||
Remove-Item -Recurse -Force target -ErrorAction SilentlyContinue
|
||||
|
||||
# 2. 停止后端服务(在运行服务的终端按 Ctrl+C)
|
||||
|
||||
# 3. 重新启动服务
|
||||
cd aiotagro-cattle-trade
|
||||
mvn spring-boot:run
|
||||
```
|
||||
|
||||
## ⚠️ 重要注意事项
|
||||
|
||||
### 1. 数据备份
|
||||
在删除字段前,务必备份数据库:
|
||||
```sql
|
||||
-- 导出整个数据库
|
||||
mysqldump -u root -p cattle_trade > cattle_trade_backup_$(date +%Y%m%d).sql
|
||||
|
||||
-- 或只备份 member_driver 表
|
||||
mysqldump -u root -p cattle_trade member_driver > member_driver_backup_$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
### 2. 数据迁移
|
||||
如果 member_driver 表的 car_number 字段中有重要数据,需要先迁移到 vehicle 表:
|
||||
|
||||
```sql
|
||||
-- 检查是否有数据
|
||||
SELECT id, username, car_number
|
||||
FROM member_driver
|
||||
WHERE car_number IS NOT NULL AND car_number != '';
|
||||
|
||||
-- 迁移数据到 vehicle 表(根据实际情况调整)
|
||||
-- INSERT INTO vehicle (license_plate, ...)
|
||||
-- SELECT DISTINCT car_number, ... FROM member_driver WHERE car_number IS NOT NULL;
|
||||
```
|
||||
|
||||
### 3. 代码已同步
|
||||
以下代码文件已经移除了对 `car_number` 的引用:
|
||||
- ✅ `MemberDriverMapper.java` - 所有 SQL 查询已移除 car_number
|
||||
- ✅ `MemberController.java` - 新增/更新司机时不再使用 car_number
|
||||
- ✅ `DeliveryServiceImpl.java` - 不再从司机表查询车牌号
|
||||
- ✅ `XqClientMapper.java` - 从 delivery 表获取 license_plate
|
||||
- ✅ `JbqClientMapper.xml` - 从 delivery 表获取 license_plate
|
||||
|
||||
## 🎯 预期结果
|
||||
|
||||
执行完成后:
|
||||
1. ✅ `member_driver` 表不再包含 `car_number` 字段
|
||||
2. ✅ 创建运送清单时不会报 `Unknown column 'md.car_number'` 错误
|
||||
3. ✅ 车牌号信息从 `vehicle` 表获取,通过 `delivery.license_plate` 关联
|
||||
4. ✅ 司机和车辆是完全独立的两个模块
|
||||
|
||||
## 🔧 故障排查
|
||||
|
||||
如果删除字段后仍然报错:
|
||||
|
||||
1. **清除 MyBatis 缓存**
|
||||
```powershell
|
||||
Remove-Item -Recurse -Force target
|
||||
```
|
||||
|
||||
2. **检查是否有其他地方引用**
|
||||
```bash
|
||||
# 在项目中搜索 car_number
|
||||
grep -r "car_number" tradeCattle/aiotagro-cattle-trade/src/
|
||||
```
|
||||
|
||||
3. **重启数据库连接池**
|
||||
- 完全停止 Spring Boot 应用
|
||||
- 等待 30 秒让连接池清空
|
||||
- 重新启动应用
|
||||
|
||||
## 📞 联系方式
|
||||
|
||||
如果遇到问题,请提供:
|
||||
1. 诊断脚本的完整输出
|
||||
2. 触发器的定义(如果有)
|
||||
3. 错误日志的完整堆栈跟踪
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: 1.0
|
||||
**创建日期**: 2025-10-29
|
||||
**最后更新**: 2025-10-29
|
||||
|
||||
Reference in New Issue
Block a user