首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 錯誤代碼完整參考手冊(伺服器端與客戶端)

     編輯:MySQL 綜合教學

MySQL 錯誤代碼完整參考手冊

當使用任何主機語言呼叫 MySQL 時,都可能遇到各類錯誤。本文系統整理了 MySQL 伺服器錯誤代碼與客戶端錯誤代碼,供開發人員快速查找、診斷問題。

一、伺服器錯誤代碼與訊息

伺服器錯誤資訊來源於原始碼檔案 share/errmsg.txt。該檔案中的「%d」與「%s」分別代表數值與字串佔位符,實際顯示時會被具體數值取代。錯誤值、SQLSTATE 值亦由此檔案生成至 include/mysqld_error.h、include/mysqld_ername.h、include/sql_state.h 等標頭檔。因版本更新頻繁,實際錯誤代碼可能超出本列表範圍。

常見伺服器錯誤代碼速查表(節選)

錯誤碼SQLSTATE符號常數錯誤訊息範例
1000HY000ER_HASHCHKhashchk
1004HY000ER_CANT_CREATE_FILE無法建立檔案 '%s' (errno: %d)
1005HY000ER_CANT_CREATE_TABLE無法建立資料表 '%s' (errno: %d)
1007HY000ER_DB_CREATE_EXISTS無法建立資料庫 '%s',資料庫已存在
1016HY000ER_CANT_OPEN_FILE無法開啟檔案:'%s' (errno: %d)
1021HY000ER_DISK_FULL磁碟已滿 (%s);等待釋放空間…
102223000ER_DUP_KEY無法寫入;重複資料表 '%s' 的鍵值
1032HY000ER_KEY_NOT_FOUND在 '%s' 中找不到記錄
104008004ER_CON_COUNT_ERROR連線數過多
104442000ER_DBACCESS_DENIED_ERROR拒絕用戶 '%s'@'%s' 存取資料庫 '%s'
104528000ER_ACCESS_DENIED_ERROR拒絕用戶 '%s'@'%s' 的存取(使用密碼:%s)
104942000ER_BAD_DB_ERROR未知資料庫 '%s'
105042S01ER_TABLE_EXISTS_ERROR資料表 '%s' 已存在
105142S02ER_BAD_TABLE_ERROR未知資料表 '%s'
105442S22ER_BAD_FIELD_ERROR'%s' 中未知欄位 '%s'
106223000ER_DUP_ENTRY鍵 %d 的重複條目 '%s'
106442000ER_PARSE_ERROR第 %d 行,%s 附近 '%s' 有語法錯誤
1093HY000ER_UPDATE_TABLE_USED無法在 FROM 子句中指定要更新的目標資料表 '%s'
1114HY000ER_RECORD_FILE_FULL資料表 '%s' 已滿
1129HY000ER_HOST_IS_BLOCKED因連線錯誤過多,主機 '%s' 被封鎖;請用 'mysqladmin flush-hosts' 解封
114642S02ER_NO_SUCH_TABLE資料表 '%s.%s' 不存在
115308S01ER_NET_PACKET_TOO_LARGE封包大於 'max_allowed_packet' 位元組
1175HY000ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE安全更新模式下,嘗試不使用 WHERE 條件更新含 KEY 欄位的資料表
1193HY000ER_UNKNOWN_SYSTEM_VARIABLE未知系統變數 '%s'
1205HY000ER_LOCK_WAIT_TIMEOUT鎖定等待逾時;請嘗試重新啟動事務
121340001ER_LOCK_DEADLOCK嘗試獲取鎖定時發現死結;請嘗試重新啟動事務
1215HY000ER_CANNOT_ADD_FOREIGN無法新增外鍵約束
121623000ER_NO_REFERENCED_ROW無法新增或更新子列:外鍵約束失敗
121723000ER_ROW_IS_REFERENCED無法刪除或更新父列:外鍵約束失敗
122642000ER_USER_LIMIT_REACHED用戶 '%s' 已超出 '%s' 資源限制(目前值:%ld)
126422003ER_WARN_DATA_OUT_OF_RANGE第 %ld 列 '%s' 的值超出範圍已被調整
1290HY000ER_OPTION_PREVENTS_STATEMENTMySQL 以 %s 選項運行,無法執行該陳述式
129222007ER_TRUNCATED_WRONG_VALUE截斷了不正確的 %s 值: '%s'
131770100ER_QUERY_INTERRUPTED查詢執行被中斷
1364HY000ER_NO_DEFAULT_FOR_FIELD欄位 '%s' 沒有預設值
136522012ER_DIVISION_BY_ZERO除以零
1396HY000ER_CANNOT_USER對 %s 的操作 %s 失敗
140622001ER_DATA_TOO_LONG第 %ld 列 '%s' 的資料過長
1418HY000ER_BINLOG_UNSAFE_ROUTINE該預存程序未聲明 DETERMINISTIC/NO SQL/READS SQL DATA,且二進位日誌已啟用
1442HY000ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG無法在預存函數/觸發器中更新已被呼叫語句使用的資料表 '%s'
145123000ER_ROW_IS_REFERENCED_2無法刪除或更新父列:外鍵約束失敗 (%s)
145223000ER_NO_REFERENCED_ROW_2無法新增或更新子列:外鍵約束失敗 (%s)

註:完整代碼表包含 1000~1494 號共 400 餘條錯誤,上表僅列舉高頻項目。完整清單請參考 MySQL 官方文件或原始碼 share/errmsg.txt。

二、客戶端錯誤代碼與訊息

客戶端錯誤定義於 include/errmsg.h 與 libmysql/errmsg.c。以下為常見客戶端錯誤:

錯誤碼符號常數錯誤訊息範例
2000CR_UNKNOWN_ERROR未知 MySQL 錯誤
2002CR_CONNECTION_ERROR無法透過 socket '%s' (%d) 連線到本地 MySQL 伺服器
2003CR_CONN_HOST_ERROR無法連線到 '%s' (%d) 上的 MySQL 伺服器
2006CR_SERVER_GONE_ERRORMySQL 伺服器已離線
2008CR_OUT_OF_MEMORYMySQL 客戶端記憶體不足
2012CR_SERVER_HANDSHAKE_ERR伺服器握手過程出錯
2013CR_SERVER_LOST查詢過程中失去與 MySQL 伺服器的連線
2014CR_COMMANDS_OUT_OF_SYNC指令不同步;目前無法執行該指令
2020CR_NET_PACKET_TOO_LARGE接收封包大於 'max_allowed_packet' 位元組
2026CR_SSL_CONNECTION_ERRORSSL 連線錯誤
2027CR_MALFORMED_PACKET畸形封包
2049CR_SECURE_AUTH拒絕使用舊認證協定(4.1.1 之前)的連線(啟用了 client 'secure_auth' 選項)
2054CR_NOT_IMPLEMENTED該功能尚未實作

三、排錯建議

  • 查看完整錯誤清單:執行 perror 錯誤碼 可獲取系統層級錯誤說明。
  • 關注 SQLSTATE:標準 SQLSTATE 碼(如 23000 完整性約束違規、42000 語法錯誤)有助於跨資料庫移植應用。
  • 檢查伺服器日誌:error.log 記錄了啟動、關閉、異常崩潰等關鍵事件。
  • 調整參數:針對 1153 (封包過大)、1040 (連線過多)、1205 (鎖等待逾時) 等錯誤,可透過調大 max_allowed_packet、max_connections、innodb_lock_wait_timeout 緩解。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved