mysql 客户服务号获取_《MySQL排错指南》——1.4 获取查询信息-阿里云开发者社区...
本節書摘來自異步社區出版社《MySQL排錯指南》一書中的第1章,第1.4節,作者:【美】Sveta Smirnova(斯維特 斯米爾諾娃),更多章節內容可以訪問云棲社區“異步社區”公眾號查看。
1.4 獲取查詢信息
正如前一節看到的一樣,數據庫會返回一些關于每個查詢的重要信息,有些信息直接展現在MySQL的訪問客戶端中,而有些信息則需要通過如SHOW WARNINGS等命令才能得到。當從應用程序中調用SQL語句的時候,獲取這些返回信息并確認沒有異常情況發生同樣重要。所有語言的MySQL API都提供了獲取服務器返回信息的接口。本節將討論這些接口。這里僅涉及C的API,因為我必須選擇一種語言的API,并且大部分其他語言的API都是基于C的API的[2]。
受影響的行數
我們從之前見過的輸出開始,每次插入、更新或者刪除后都會顯示有多少行數據插入、更新或者刪除了:
這個信息代表查詢正常執行并且修改了N行數據。
要在應用程序中獲取相同的信息,可以調用:
如果有改變發生,該函數會返回一個正數,如果沒有改變那么返回0,?1代表反生錯誤。
對于UPDATE語句,如果客戶端設置了CLIENT_FOUND_ROWS,那么該函數將會返回滿足WHERE條件的行數,這個數并不總是和實際更改的行數一致。
提示 提示
對于Connector/J來說,默認不啟用受影響的行,因為這不是JDBC兼容的特性并且會使其DML語句依賴于匹配的行數而不是受影響的行數的大多數應用程序產生錯誤。不過對于INSERT...ON DUPLICATE KEY UPDATE類型的語句會返回正確的更新數量。連接字符串屬性useAffectedRows告訴Connector/J在連接到服務器的時候是否設置CLIENT_FOUND_ROWS標志。
匹配的行數
輸出中表示該數目的字符串是:
該輸出表明有多少行滿足WHERE條件。
下面的C函數:
以字符串格式返回關于最近的查詢的補充信息。
對于更新操作來說,它返回的字符串類似:
其中,每個#依次對應代表匹配的行數、修改的行數和警告數目??梢酝ㄟ^解析該行中的“matched: #”獲悉有多少行被查找出來。
被修改的行數
輸出中代表該數目的字符串是:
該輸出表明有多少行實際上修改了。需要注意的是,匹配行數M和修改的行數P是可以不同的。例如,假設你想要修改的列已經包含你指定的值,在這種情況下,該列會被認為是匹配的而不是修改的。
在應用程序中,像之前一樣用mysql_info()獲取信息,不過這次是解析“Changed: #”。
警告:數目和消息
輸出中表示這部分信息的字符串是:
如果服務器在處理請求過程中探查到一些不尋常的情況或者值得報告的情況,你將會獲得警告。不過查詢仍然會執行并且會修改數據。無論如何請確保檢查警告信息,因為它們會幫助你獲悉潛在的問題。
在應用程序中,有很多不同的方式去獲取警告。仍可以使用mysql_info()函數,然后解析“Warinings: #”。也可以調用:
如果有警告,可以執行SHOW WARNINGS命令去獲取關于究竟發生了什么的文本消息。另一個選擇是:
該函數將返回最近的SQL狀態(SQLSTATE)。例如,“42000”代表語法錯誤,“00000”代表沒有錯誤和警告。
提示 提示
SQLSTATE的值由ANSI SQL標準定義,用于表明語句的執行狀態。執行狀態被設置成標準中定義的狀態碼,表明一個請求是成功完成還是返回異常。SQLSTATE以字符串形式返回。要了解MySQL服務器可能返回哪些狀態碼,可以閱讀MySQL參數手冊中的“服務器錯誤碼和錯誤消息”一節。
錯誤
檢查錯誤也總是很有用。下面的函數返回最近SQL語句的錯誤值。
..tu18-1.tif
該函數返回最近一次錯誤的MySQL錯誤代碼。例如,語法錯誤會生成數字1064,0意味著沒有錯誤。
該函數返回最近一次錯誤的文本信息。對于語法錯誤,它會返回類似以下的內容。
這有利于保存存儲于不同日志文件中的信息,使你可以在任何時候檢查它們。
提示 提示
MySQL官方文檔包含MySQL服務器可能返回的錯誤列表以及客戶端錯誤列表。
**
通過perror獲取錯誤字符串**
perror工具是MySQL發行包中攜帶的一款用于解決問題的非常有用的工具。perror能夠提供與給定錯誤代碼相關聯的MySQL及其所在操作系統的錯誤信息。可以從MySQL命令行客戶端、信息函數或其他錯誤日志文件中的錯誤消息中后面括號的部分獲取錯誤代碼。下面是一些示例:
當命令產生錯誤的時候會在MySQL客戶端輸出這些錯誤代碼,這些錯誤代碼可以通過mysql_error()函數由程序獲取。然而,當你面對一個錯誤碼不知所措的時候,可以使用perror工具。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql 客户服务号获取_《MySQL排错指南》——1.4 获取查询信息-阿里云开发者社区...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Xcode8更新约束
- 下一篇: linux cmake编译源码,linu