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

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可能不是一個足夠好的理由。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章