轉帖|使用教程|編輯:鮑佳佳|2021-01-05 13:51:01.667|閱讀 619 次
概述:我們在第1部分探討了MySQL嚴格SQL模式的影響,以及如何使用Navicat for MySQL 15對其進行查看和設置。在今天的后續文章中,我們將探討何時使用默認值以及如何選用恰當的默認值。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Navicat for MySQL 是管理和開發 MySQL 或 MariaDB 的理想解決方案。它是一套單一的應用程序,能同時連接 MySQL 和 MariaDB 數據庫,并與 Amazon RDS、Amazon Aurora、Oracle Cloud、Microsoft Azure、阿里云、騰訊云和華為云等云數據庫兼容。這套全面的前端工具為數據庫管理、開發和維護提供了一款直觀而強大的圖形界面。
您可能已經知道,在不可為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中(如下圖所示),您可以通過下拉列表設置默認值:
“默認”值設置記錄創建時的時間戳,而選中“根據當前時間戳更新”框則指示MySQL在每次更新操作時更新時間戳。
前哨值
在RDBMS中,前哨值(Sentinel Value)是具有特殊含義的值。 例如,年齡列中的值999表示它是未知的。 我還看到了使用“1900-01-01”作為未知日期的應用程序。 前哨值在您要分配“未知”值的情況下很有用,而null值表示“無值”。 并非每個人都喜歡哨兵值,因為使用數據庫的人員和應用程序必須知道所有哨兵值才能正確處理它們。
總結
盡管默認值以及引申開來的前哨值在組織良好的數據庫設計和開發中具有他們的地位和價值,但在分配值之前,應考慮每個值的用途。 僅僅依靠默認值來避免使用null可能不是一個足夠好的理由。
好消息!慧都17周年慶,隆重推出購正版軟件送蘋果手機、電腦、3C數碼等豪禮!.NET報表控件Navicat For MySql正版授權最高直降40935 元!更多優惠咨詢!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: