11、MySQL常见错误代码一览表
MySQL 出錯時反饋的代碼代表出錯的原因,我們只有明白這些代碼代表的意思,才能了解 MySQL 數據庫的錯誤,找出原因,解決問題。下面介紹 MySQL 服務器和客戶端中的錯誤代碼、提示消息的生成方式和查看方法,最后還對 MySQL 中常見的錯誤代碼做了詳細說明。
MySQL服務器端錯誤代碼和消息
MySQL 是根據安裝目錄下 share 中的 errmsg.txt 文件來生成 include 下 mysqld_error.h 和 mysqld_ername.h 中的錯誤定義的。另外,SQLSTATE 的值也是根據 share 下 errmsg.txt 文件中的內容來生成 include 下的 sql_state.h 的。
默認情況下,服務器出錯代碼都是以 1 開頭的,例如“1004 SQLSTATE: HY000 (ER_CANT_CREATE_FILE)”,該消息的錯誤代碼為 1004,表示“無法創建文件”。
errmsg.txt 文件的部分內容如下:
#define ER_NO_SUCH_TABLE 1146 "Table '%-.64s.%-.64s' doesn't exist", #define ER_NONEXISTING_TABLE_GRANT 1147 "There is no such grant defined for user '%-.32s' on host '%-.64s' on table '%-.64s'", #define ER_NOT_ALLOWED_COMMAND 1148 "The used command is not allowed with this MySQL version", #define ER_SYNTAX_ERROR 1149 "You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use", #define ER_DELAYED_CANT_CHANGE_LOCK 1150 "Delayed insert thread couldn't get requested lock for table %-.64s", #define ER_TOO_MANY_DELAYED_THREADS 1151 "Too many delayed threads in use",文件中包含的 %d 和 %ld 代表數值,%s 代表字符串。顯示具體信息時,它們將被消息值取代。
例如,錯誤代碼為 1146 的錯誤信息在 share 下的 errmsg.txt 中顯示為“Table ‘%-.192s.%-.192s’ doesn’t exist",即“表’ '%-.192s.%-.192s"不存在”。其中“%-.192s”可表示左對齊 192 個字符寬度,可理解為此處輸出為占位字符串,在顯示具體信息時回避字符串消息替換。
例 1
切換 test 數據庫,查詢數據庫下有哪些數據表,SQL 語句和執行過程如下:
查詢數據表 tb_student 中的記錄,SQL 語句和執行過程如下:
mysql> SELECT * FROM tb_student; +----+--------+ | id | name | +----+--------+ | 1 | Java | | 2 | MySQL | | 3 | Python | +----+--------+ 3 rows in set (0.06 sec)查詢數據表 tb_oldstudent 中的記錄,SQL 語句和運行結果如下:
mysql> SELECT * FROM tb_oldstudent; ERROR 1146 (42S02): Table 'test.tb_oldstudent' doesn't exist由結果可以看出,在 test 數據庫中不存在 tb_oldstudent 數據庫,服務器錯誤代碼為 1146。
MySQL客戶端錯誤代碼和消息
MySQL 是根據安裝目錄下 include 中的 errmsg.h 文件來生成錯誤代碼的。
errmsg.h 文件的部分內容如下:
#define CR_NAMEDPIPESETSTATE_ERROR 2018 #define CR_CANT_READ_CHARSET 2019 #define CR_NET_PACKET_TOO_LARGE 2020 #define CR_EMBEDDED_CONNECTION_2021 #define CR_PROBE_SLAVE_STATUS 2022 #define CR_PROBE_SLAVE_HOSTS 2023 #define CR_PROBE_SLAVE_CONNECT 2024 #define CR_PROBE_MASTER_CONNECT 2025 #define CR_SSL_CONNECTION_ERROR 2026 #define CR_MALFORMED_PACKET 2027 #define CR_WRONG_LICENSE 2028文件中 %d 和 %s 分別代表數值和字符串,和服務器端錯誤代碼顯示方式一樣,在顯示時它們將被消息值取代。
默認情況下,客戶端出錯代碼都是以 2 開頭的,例如錯誤代碼為 2025(CR_PROBE_MASTER_CONNECT)的,表示連接到主服務器時出錯。
常見錯誤代碼
常見的服務器錯誤代碼及說明如下所示:
錯誤代碼 說 明
1004 無法創建文件
1005 無法創建數據表、創建表失敗
1006 無法創建數據庫、創建數據庫失敗
1007 無法創建數據庫,數據庫己存在
1008 無法刪除數據庫,數據庫不存在
1009 不能刪除數據庫文件導致刪除數據庫失敗
1010 不能刪除數據目錄導致刪除數據庫失敗
1011 刪除數據庫文件時出錯
1012 無法讀取系統表中的記錄
1013 無法獲取的狀態
1014 無法獲得工作目錄
1015 無法鎖定文件
1016 無法打開文件
1017 無法找到文件
1018 無法讀取的目錄
1019 無法為更改目錄
1020 記錄已被其它用戶修改
1021 硬盤剩余空間不足,請加大硬盤可用空間
1022 關鍵詞重讀,更改記錄失敗
1023 關閉時發生錯誤
1025 更改名字時發生錯誤
1032 記錄不存在
1036 數據表是只讀的,不能對它進行修改
1037 系統內存不足,請重啟數據庫或重啟服務器
1042 無效的主機名
1044 當前用戶沒有訪問數據庫的權限
1045 不能連接數據庫,用戶名或密碼錯誤
常見的客戶端錯誤代碼及說明如下所示:
總結
以上是生活随笔為你收集整理的11、MySQL常见错误代码一览表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10、如何查看MySQL系统帮助?
- 下一篇: 1、数据库设计的基本步骤