MySQL 官方錯誤代碼速查,涵蓋 1005-1235 常見錯誤,附帶中文含義、典型原因、解決建議,適合開發/運維快速診斷。
資料庫/資料表操作類 (1005-1011)
| 代碼 | 訊息 | 常見原因 | 解決 |
| 1005 | Can't create table | 外鍵定義錯誤、磁碟滿、權限 | 檢查 FK 參考表/欄位、磁碟空間、目錄權限 |
| 1006 | Can't create database | 權限不足、磁碟滿、目錄存在 | 檢查 datadir 權限、空間 |
| 1007 | Database exists | 重複 CREATE DATABASE | 加 IF NOT EXISTS 或先 DROP |
| 1008 | Database doesn't exist | DROP/USE 不存在的庫 | 確認名稱拼寫 |
| 1009 | Error dropping database (can't remove file) | 檔案被佔用/權限 | 停止服務、檢查鎖定 |
| 1010 | Error dropping database (can't remove dir) | 目錄非空/權限 | 手動清理後再 DROP |
| 1011 | Error dropping database (can't remove file) | 同 1009 | 同上 |
資料操作與約束類 (1020-1062)
| 代碼 | 訊息 | 常見原因 | 解決 |
| 1020 | Record changed by another user | 並發更新衝突 | 樂觀鎖/重試邏輯 |
| 1021 | Disk full | 磁碟空間不足 | 清理/擴容、檢查 tmpdir |
| 1022 | Duplicate key | 唯一鍵/主鍵衝突 | 檢查業務邏輯、用 INSERT IGNORE/ON DUPLICATE KEY |
| 1032 | Record not found | UPDATE/DELETE 無匹配行 | 確認 WHERE 條件 |
| 1036 | Table is read only | MyISAM 表損壞/唯讀屬性 | REPAIR TABLE、檢查檔案屬性 |
| 1037 | Out of memory | 記憶體不足 | 重啟服務、調大 innodb_buffer_pool |
| 1040 | Too many connections | 連線數達上限 | 調大 max_connections、檢查洩漏 |
| 1044 | Access denied for user | 權限不足 | GRANT 權限、確認 host 匹配 |
| 1045 | Access denied (user/pwd) | 帳號密碼錯誤 | 重置密碼、檢查 skip-grant-tables |
| 1048 | Column cannot be null | NOT NULL 欄位插入 NULL | 提供預設值或修改結構 |
| 1049 | Unknown database | 庫不存在 | 建庫或修正連線字串 |
| 1050 | Table already exists | 重複 CREATE TABLE | 加 IF NOT EXISTS |
| 1051 | Unknown table | 表不存在 | 確認名稱、大小寫敏感度 |
| 1054 | Unknown column | 欄位不存在 | 檢查拼寫、ALTER TABLE ADD |
| 1062 | Duplicate entry for key | 唯一鍵衝突 (含主鍵) | 同 1022 |
網路與連線類 (1081, 1158-1161)
| 代碼 | 訊息 | 方向 | 排查 |
| 1081 | Can't create socket | Client→Server | 防火牆、端口、skip-networking、bind-address |
| 1158 | Network read error | 雙向 | 網路抖動、MTU、驅動程式 |
| 1159 | Network read timeout | Client→Server | 調大 net_read_timeout、檢查長查詢 |
| 1160 | Network write error | Server→Client | 結果集過大、網路中斷 |
| 1161 | Network write timeout | Server→Client | 調大 net_write_timeout |
權限與資源類 (1130-1235)
| 代碼 | 訊息 | 解決 |
| 1130 | Host not allowed to connect | GRANT ...@'%' 或具體 IP、FLUSH PRIVILEGES |
| 1133 | User doesn't exist | CREATE USER、確認 host 部分 |
| 1142 | Command denied to user | GRANT 具體權限 ON db.* |
| 1146 | Table doesn't exist | 同 1051 |
| 1149 | Syntax error | 檢查 SQL、保留字需反引號 |
| 1180 | Commit failed | 檢查事務邏輯、磁碟空間 |
| 1181 | Rollback failed | 同上 |
| 1205 | Lock wait timeout | 調大 innodb_lock_wait_timeout、優化長事務 |
| 1216 | FK constraint fails (child) | 先插父表、檢查 FK 定義 |
| 1217 | FK constraint fails (parent) | 先刪子表、SET FOREIGN_KEY_CHECKS=0 |
| 1226 | User exceeded resource limits | MAX_QUERIES_PER_HOUR 等限制 |
| 1227 | Access denied (SUPER/ADMIN) | 需更高權限帳號 |
| 1235 | MySQL version too old | 升級版本或避免用新功能 |
快速查詢技巧
-- 官方文件線上查詢
https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html
-- 客戶端顯示錯誤代碼
mysql --show-warnings -u root -p
建議將高頻錯誤代碼整合至監控告警規則 (如 1040, 1062, 1205, 1216/1217)。