創作內容

0 GP

MySQL學習-18-錯誤處理與查詢

作者:鹹魚│2020-06-11 22:42:57│巴幣:0│人氣:142
當資料庫在儲存時通常都會要求格式完全正確的資料,但是有時候視需求可能可以放行不太嚴重的錯誤。
MySQL有兩種檢查資料的嚴格程度,分別是 Strict 與 non-Strict 。在 Strict 模式下,只要資料不是完全正確的就會被系統攔下來導致指令中斷。而 non-Strict 模式下則是會盡量處理這些錯誤的資料,再將修正後的資料儲存起來。

設定為 Strict
語法:
set sql_mode - 'STRICT_TRANS_TABLES'
set sql_mode - 'STRICT_ALL_TABLES'
兩者都能設定成Strict,但是使用支援交易的資料時使用STRICT_TRANS_TABLES較能使資料庫維持資料完整性。

non-Strict 模式
語法:set session | global sql_mode = ' ';
設定為session時只有單一個用戶,設定為global時則是所有用戶都被改變。
都不選時默認為session。
在non-Strict下各種型態的運作方式
範例:建立一個nons表格
刻意新增超過範圍的資料
執行結果,只是警告,並沒有終止這次指令。

來看看新增的資料都被修正成什麼

由範例可得知,
數值:超過範圍時以當前型態的最大值儲存,tinyint正數最大只到127所以新增超過127時以127儲存。
字串:超過範圍時指儲存到範圍內的字元,Jacky超過1字元所以儲存Jack。
enum:儲存錯誤資料時以空字串儲存,數值為0。
set:錯誤的部分資料以空字串儲存,數值為0,正確的部分不影響所以儲存ABC。

Null 與 not Null
就算是在non-Strict下not Null欄位一樣不可以儲存Null,所以新增資料時會以該型態的預設值填入。

在Strict模式時想要一個表格允許錯誤可以使用ignore。
insert 或 update 後加上ignore便可以讓表格這次儲存以non-Strict模式通過編譯。
結果

sql_mode設定時可以加入其他設定值讓資料庫更貼近自己所需:
ALLOW_INVALID_DATES 允許錯誤的日期
NO_ZERO_DATE 不允許全是0的日期
NO_ZERO_IN_DATE 日期資料中不可以有0
ERROR_FOR_DIVISION_BY_ZERO 除0時產生錯誤,而不是產生Null

單一使用:set sql_mode='ALLOW_INVALID_DATES'
使用多個:set sql_mode='ALLOW_INVALID_DATES,NO_ZERO_DATE' 用逗號隔開即可。

查詢錯誤與警告訊息
語法:
查詢警告與錯誤:show warnings
只查詢錯誤:show errors
可以使用limit限制查詢數量。
範例:
比如剛剛在Strict下直接新增錯誤資料。
必定會被系統判定錯誤後終止,此時使用查詢錯誤。
執行結果
可以得到一些如何解決錯誤的建議。

若是錯誤碼有Errcode存在代表錯誤來自作業系統。
此時必須使用命令提示字元的perror程式查詢錯誤碼才能知道錯誤為何。
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4813445
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★qwertyuiop32 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:MySQL學習-17-資... 後一篇:MySQL學習-19-匯...

追蹤私訊切換新版閱覽

作品資料夾

jason990505各位巴友
歡迎各位巴友來我小屋觀看小說及文章 或單純交流認識!看更多我要大聲說6小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】