天天看點

如何使用Navicat for MySQL 來檢視和設定嚴格模式?

Navicat for MySQL 是管理和開發 MySQL 或 MariaDB 的理想解決方案。它是一套單一的應用程式,能同時連接配接 MySQL 和 MariaDB 資料庫,并與 Amazon RDS、Amazon Aurora、Oracle Cloud、Microsoft Azure、阿裡雲、騰訊雲和華為雲等雲資料庫相容。這套全面的前端工具為資料庫管理、開發和維護提供了一款直覺而強大的圖形界面。

點選下載下傳 Navicat for MySQL最新試用版

第1部分:嚴格的SQL模式

沒有為不可為null列提供值時出現錯誤可能是造成挫敗感的巨大根源。通過為這些列設定預設值,可以最大限度地減少此類錯誤的發生。似乎很容易解決,但就如所有事情,細節都是魔鬼。您必須注意不要僅為了使INSERT更加簡單就向表中添加一堆通用的和無用的資料。在今天的部落格中,我們将了解MySQL的嚴格SQL模式的後果,以及如何使用Navicat for MySQL 15來檢視和設定它。在第2部分中,我們将介紹在什麼情況下采用預設值(以及何時不采用)。

嚴格的SQL模式和調整後的值

在MySQL中,您可以通過打開嚴格SQL模式來控制MySQL如何處理資料更改語句(例如INSERT或UPDATE)中的無效值或缺失值。當要插入的新行不包含其定義中沒有顯式DEFAULT子句的不可為NULL列的值時,會出現缺少值。如果嚴格模式無效,MySQL會為無效或缺失值插入調整後的值并産生警告。調整值的示例包括一個空字元串,零和00:00:00 0000-00-00的時間戳/日期。

很明顯,調整後的值可能會破壞預設值的整體作用。是以,通常最好激活嚴格的SQL模式并在适當的地方提供預設值。在Navicat中,您可以在伺服器監控器的“變量”頁籤上檢查SQL模式的目前值。您可以在主菜單中的“工具”>“伺服器監控器”下找到它。

如何使用Navicat for MySQL 來檢視和設定嚴格模式?

如果存在STRICT_ALL_TABLES或STRICT_TRANS_TABLES,則嚴格SQL模式已啟用。 在決定使用哪種格式時,請注意後者更為寬容,因為如果缺少值,MySQL會為列資料類型插入适當的調整值,并生成警告而不是錯誤。 而且,語句的處理繼續進行。 同時,無效值被轉換為最接近的有效值。

執行嚴格的SQL模式

讓我們使用Sakila示例資料庫将嚴格SQL模式與預設SQL模式進行比較。 actor表不允許任何列中為 null,如“不是 null”标題下的複選框所示:

如何使用Navicat for MySQL 來檢視和設定嚴格模式?

如果我們使用SET指令為目前會話禁用嚴格SQL模式并執行僅提供last_name的INSERT,則資料庫會接受它,但為first_name提供空字元串:

如何使用Navicat for MySQL 來檢視和設定嚴格模式?

如果我們重新激活嚴格模式,則相同的INSERT現在會失敗,并顯示一條錯誤消息:

如何使用Navicat for MySQL 來檢視和設定嚴格模式?

總結

在今天的部落格中,我們了解了MySQL嚴格SQL模式的影響,以及如何使用 Navicat for MySQL 15進行檢視和設定。在第二部分中,我們将介紹何時使用或不使用預設值。