Navicat for MySQL 15使用教程:何時使用預設值以及如何選用恰當的預設值

不如溫暖過生活發表於2021-01-05

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

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

您可能已經知道,在不可為null列上設定預設值有助於擺脫那些討厭的“Field 'xyz' doesn't have a default value”錯誤。希望您也意識到,防止發生錯誤資訊本身並不是提供預設值的有效理由。提供預設列值的原因很多,有些很好,有些則不怎麼好。我們在第1部分探討了MySQL嚴格SQL模式的影響,以及如何使用Navicat for MySQL 15對其進行檢視和設定。在今天的後續文章中,我們將探討何時使用預設值以及如何選用恰當的預設值。

為什麼不只允許Null值?

可以為null列不會像不可為null列那樣面臨有同樣的問題,那麼為什麼不在所有非鍵列中都允許null值呢?在許多情況下,將不可為null約束應用於列的目的是迫使填充該列的應用程式或系統提供值。有時,不可為null列可能包含稽核資訊,例如使用者ID或時間戳。無論哪種情況,您都在尋找有效的資料,而不僅僅是填充的資料。

這是一個重要的考慮因素,因為它帶出了生成有用的預設值以及前端驗證的重要性。我仍然記得我的第一個Web應用程式。它是用於收集了使用者詳細資訊,例如姓名,電子郵件和電話號碼。所有這些欄位都是必需的,因此聰明的使用者找到了各種規避輸入真實資訊的方法,例如輸入電話號碼111-111-1111和“Elmer J. Fudd”之類的名稱。

產生時間戳

現在,我們已經討論了為什麼值得盡您所能嘗試設定自動填充欄位,下面讓我們看一下生成值的常見示例:審計時間戳。

Sakila示例資料庫中的一些表具有last_update列。這些列應用timestamp資料型別;其值設定為MySQL CURRENT_TIMESTAMP函式的輸出。在Navicat Premium中(如下圖所示),您可以通過下拉選單設定預設值:

last_update (135K)

預設”值設定記錄建立時的時間戳,而選中“根據當前時間戳更新”框則指示MySQL在每次更新操作時更新時間戳。

前哨值

在RDBMS中,前哨值(Sentinel Value)是具有特殊含義的值。 例如,年齡列中的值999表示它是未知的。 我還看到了使用“1900-01-01”作為未知日期的應用程式。 前哨值在您要分配“未知”值的情況下很有用,而null值表示“無值”。 並非每個人都喜歡哨兵值,因為使用資料庫的人員和應用程式必須知道所有哨兵值才能正確處理它們。

總結

儘管預設值以及引申開來的前哨值在組織良好的資料庫設計和開發中具有他們的地位和價值,但在分配值之前,應考慮每個值的用途。 僅僅依靠預設值來避免使用null可能不是一個足夠好的理由。

相關文章