- MySQL數據庫管理與開發實踐教程 (清華電腦學堂)
- 程朝斌
- 1120字
- 2021-03-19 18:16:54
4.5 默認值約束
默認值的使用減輕了數據添加的負擔。有著默認值約束的字段,在添加時省略該字段數據,MySQL會自動添加該字段的默認值。本節介紹默認值的使用。
4.5.1 創建默認值約束
創建默認值約束可參考圖4-1。其他約束是直接選中復選框,而默認值約束是為字段設置一個默認的取值,因此是文本框的形式,將字段的默認取值寫入Default文本框。
默認值在MySQL Workbench工具下的設置可參考表的創建步驟,只是添加了Default文本框設置。
默認值可以設置為固定值,也可以設置為通過計算獲得的數據。系統在添加字段默認值設置時,將根據字段的數據類型提供幾個常用的默認值。如圖4-4~圖4-6所示分別是INT型字段、VARCHAR型字段和TIMESTAMP型字段的默認值設置。

圖4-4 INT型字段

圖4-5 VARCHAR型字段

圖4-6 TIMESTAMP型字段
在表的創建界面或表的修改界面,都可以對字段進行右擊操作,彈出對話框如圖4-4~圖4-6所示。
比較三個圖可以看出,不同數據類型的字段,系統提供的默認值設置不同。INT型字段和VARCHAR型字段的默認值操作比較簡單,可選擇Clear Default清除默認值、選擇Default Null設置默認值為空,選擇Dfault 0(或Dfault '')設置默認值為0(或空字符串)。而TIMESTAMP型字段的選項比較豐富,除了與INT型字段一樣的設置以外,還可以使用以下幾個選項。
1.Default CURRENT_TIMESTAMP
添加記錄時設置字段值為當前時間;更新這條記錄的時候,這條記錄的這個字段不會改變。
2.Default NULL ON UPDATE CURRENT_TIMESTAMP
若字段為空,更新記錄時更新這個字段為當前時間。
3.Default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
更新這條記錄的時候,無論是否涉及該字段,這條記錄的這個字段將會改變。
如將新聞發布的時間是新聞記錄添加的時間,可設置為Default CURRENT_TIMESTAMP。而信息的最后修改時間是需要在更新信息時跟著變化的,可設置為Default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。
【范例9】
創建學生信息表,設置學生性別字段默認值為男,代碼如下。
CREATE TABLE 'fruitshop'.'student' ( 'id' INT NOT NULL, 'name' VARCHAR(45) NULL, 'sex' VARCHAR(4) NOT NULL DEFAULT '男', 'age' INT NULL, 'native' VARCHAR(20) NULL, PRIMARY KEY ('id'));
若上述sex字段的非空約束設置為NULL,那么在添加數據時,系統將無法確定以NULL填充還是以'男'填充。
注意
被設置默認值的字段最好有非空約束,否則系統將無法確定該字段在添加時添加NULL還是添加默認值。
4.5.2 修改默認值約束
修改默認值約束包括對沒有默認值的字段添加默認值和修改字段的默認值數據。這兩種修改方式的語法一樣,與表字段的類型修改語法相似。
【范例10】
為fruitshop.workers表的sex字段添加默認值約束,設置其默認值為男,代碼如下。
ALTER TABLE 'fruitshop'.'workers' CHANGE COLUMN 'sex' 'sex' VARCHAR(45) NULL DEFAULT '男' ;
【范例11】
修改fruitshop.workers表的sex字段的默認值為女,代碼如下。
ALTER TABLE 'fruitshop'.'workers' CHANGE COLUMN 'sex' 'sex' VARCHAR(45) NULL DEFAULT '女' ;
4.5.3 刪除默認值約束
默認值的刪除相當于清除默認值或將默認值設置為NULL,因此可在如圖4-4~圖4-6所示的彈出對話框中選擇Clear Default選項清除默認值或選擇Default Null選項設置默認值為空。若使用SQL語句刪除默認值,如刪除fruitshop.workers表的sex字段的默認值,代碼如下。
ALTER TABLE 'fruitshop'.'workers' CHANGE COLUMN 'sex' 'sex' VARCHAR(45) NULL ;
上述代碼與修改字段數據類型的代碼一樣,修改字段的默認值相當于修改字段的屬性。
- ClickHouse性能之巔:從架構設計解讀性能之謎
- JavaScript:Moving to ES2015
- OpenStack Orchestration
- OpenResty完全開發指南:構建百萬級別并發的Web應用
- Practical Game Design with Unity and Playmaker
- ArcGIS for Desktop Cookbook
- Node.js 12實戰
- Laravel Application Development Blueprints
- Laravel Design Patterns and Best Practices
- Learn Linux Quickly
- Distributed Computing with Python
- Web前端開發技術實踐指導教程
- 軟件自動化測試實戰解析:基于Python3編程語言
- C++ Windows Programming
- HTML 5與CSS 3權威指南(第4版·下冊)