75 lines
2.0 KiB
Markdown
75 lines
2.0 KiB
Markdown
# 資料庫遷移說明
|
||
|
||
## 問題描述
|
||
競賽管理系統在創建競賽時出現以下錯誤:
|
||
1. `competition_award_types` 表缺少 `order_index` 欄位
|
||
2. `competition_teams` 表缺少 `registered_at` 欄位
|
||
3. 外鍵約束失敗,存在孤立的關聯記錄
|
||
|
||
## 解決方案
|
||
|
||
### 方法一:使用智能檢查腳本(推薦)
|
||
```bash
|
||
mysql -u your_username -p your_database_name < add-missing-columns.sql
|
||
```
|
||
|
||
### 方法二:使用簡化腳本
|
||
```bash
|
||
mysql -u your_username -p your_database_name < add-missing-columns-simple.sql
|
||
```
|
||
|
||
## 腳本內容
|
||
|
||
### 1. 添加缺失欄位
|
||
- 為 `competition_award_types` 表添加 `order_index` 欄位
|
||
- 為 `competition_teams` 表添加 `registered_at` 欄位
|
||
|
||
### 2. 清理孤立記錄
|
||
- 刪除所有關聯表中不存在的 `competition_id` 記錄
|
||
|
||
### 3. 添加必要索引
|
||
- 為所有關聯表添加適當的索引以提升查詢性能
|
||
|
||
## 執行前注意事項
|
||
|
||
1. **備份資料庫**:
|
||
```bash
|
||
mysqldump -u your_username -p your_database_name > backup_before_migration.sql
|
||
```
|
||
|
||
2. **確認資料庫名稱**:
|
||
- 將 `your_database_name` 替換為實際的資料庫名稱
|
||
- 將 `your_username` 替換為實際的用戶名
|
||
|
||
3. **檢查權限**:
|
||
- 確保用戶有 ALTER TABLE 和 DELETE 權限
|
||
|
||
## 執行後驗證
|
||
|
||
執行完成後,可以運行以下查詢來驗證:
|
||
|
||
```sql
|
||
-- 檢查欄位是否添加成功
|
||
DESCRIBE competition_award_types;
|
||
DESCRIBE competition_teams;
|
||
|
||
-- 檢查索引是否創建成功
|
||
SHOW INDEX FROM competition_award_types;
|
||
SHOW INDEX FROM competition_teams;
|
||
|
||
-- 檢查孤立記錄是否已清理
|
||
SELECT COUNT(*) as orphaned_judges FROM competition_judges
|
||
WHERE competition_id NOT IN (SELECT id FROM competitions);
|
||
```
|
||
|
||
## 如果遇到錯誤
|
||
|
||
如果執行過程中遇到 "column already exists" 或 "index already exists" 錯誤,這是正常的,表示該欄位或索引已經存在,可以忽略這些錯誤。
|
||
|
||
## 聯繫支援
|
||
|
||
如果遇到其他問題,請檢查:
|
||
1. MySQL 版本是否支援所使用的語法
|
||
2. 用戶權限是否足夠
|
||
3. 資料庫連接是否正常
|