首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 常見錯誤代碼速查表與 Java 映射工具類

     編輯:MySQL 資料庫相關知識

高頻錯誤代碼分類速查

數據庫/表操作類

代碼含義常見原因
1005創建表失敗外鍵定義錯誤、磁碟滿、權限
1006創建數據庫失敗權限、磁碟、目錄殘留
1007數據庫已存在重複 CREATE DATABASE
1008數據庫不存在DROP/USE 不存在的庫
1012讀取系統表失敗權限、表損壞
1050表已存在重複 CREATE TABLE
1051表不存在DROP/SELECT 不存在的表
1146表不存在同 1051,不同錯誤碼來源

數據完整性類

代碼含義處理建議
1022鍵值重複檢查唯一索引/主鍵衝突
1048字段不能為空NOT NULL 列未賦值
1062字段值重複 (Duplicate entry)主鍵/唯一索引衝突,最常見
1169唯一鍵值重複UPDATE 導致唯一索引衝突
1216外鍵約束失敗 (子表)引用的父表記錄不存在
1217外鍵約束失敗 (父表)刪除/修改被引用的父表記錄

連接/權限類

代碼含義排查方向
1040最大連接數達到增大 max_connections、檢查連接洩漏
1042無效主機名DNS 解析、skip-name-resolve
1043握手錯誤協議不匹配、SSL 問題
1044無庫訪問權限GRANT 權限檢查
1045用戶名/密碼錯誤認證信息、caching_sha2_password 插件
1130主機無連接權限Host 列不匹配、防火牆
1226用戶資源超限MAX_QUERIES_PER_HOUR 等限制

資源/臨時表類

代碼含義解決方向
1021磁碟空間不足清理/擴容、tmpdir 指向大分區
1037內存不足重啟/調整緩衝區、檢查內存洩漏
1038排序內存不足增大 sort_buffer_size
1114表已滿MyISAM 達到 4GB/2GB 限制、磁碟滿
1116打開表太多增大 table_open_cache

網絡/事務類

代碼含義
1158/1159網絡讀錯誤/讀超時
1160/1161網絡寫錯誤/寫超時
1180提交事務失敗
1181回滾事務失敗
1205鎖等待超時
1203用戶連接數達上限

錯誤碼查詢三大方法

  1. 官方文檔附錄:Error Codes and Messages
  2. 在線查詢:https://dev.mysql.com/doc/refman/5.7/en/error-handling.html
  3. 命令行工具:perror 1062 → Duplicate entry

Java 錯誤碼映射工具類

public class MySQLErrorCodes {
    // 常用錯誤碼常量
    public static final int ER_DUP_ENTRY = 1062;
    public static final int ER_NO_REFERENCED_ROW = 1216;
    public static final int ER_ROW_IS_REFERENCED = 1217;
    public static final int ER_LOCK_WAIT_TIMEOUT = 1205;
    public static final int ER_CON_COUNT_ERROR = 1040;
    public static final int ER_ACCESS_DENIED = 1045;
    // ... 其他常量

    private static final Map<Integer, String> ERROR_MAP = new HashMap<>();
    static {
        ERROR_MAP.put(1005, "創建表失敗");
        ERROR_MAP.put(1006, "創建數據庫失敗");
        ERROR_MAP.put(1022, "鍵值重複");
        ERROR_MAP.put(1045, "用戶名或密碼錯誤");
        ERROR_MAP.put(1062, "字段值重複,入庫失敗");
        ERROR_MAP.put(1114, "表已滿");
        ERROR_MAP.put(1146, "表不存在");
        ERROR_MAP.put(1158, "網絡讀錯誤");
        ERROR_MAP.put(1205, "鎖等待超時");
        ERROR_MAP.put(1216, "外鍵約束失敗,更新子表失敗");
        ERROR_MAP.put(1217, "外鍵約束失敗,刪除父表失敗");
        // 完整映射建議從官方 errmsg.txt 自動生成
    }

    public static String getMessage(int errorCode) {
        return ERROR_MAP.getOrDefault(errorCode, "未知錯誤碼: " + errorCode);
    }

    public static boolean isDuplicateKey(int errorCode) {
        return errorCode == 1022 || errorCode == 1062 || errorCode == 1169;
    }

    public static boolean isConnectionError(int errorCode) {
        return errorCode >= 1040 && errorCode <= 1043 || errorCode == 1130 || errorCode == 1203;
    }

    public static boolean isForeignKeyError(int errorCode) {
        return errorCode == 1216 || errorCode == 1217;
    }
}

生產環境建議

  • 異常捕獲時記錄完整錯誤碼、SQLSTATE、SQL 片段、堆棧。
  • 根據錯誤分類實施差異化重試/告警策略(如主鍵衝突不重試、鎖超時指數退避重試、網絡錯誤熔斷)。
  • 定期同步官方錯誤碼列表更新映射表。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved