為保證資料庫中存儲數據的規範化,一般需要在定義欄位時進行欄位規範與約束的定義。保證在進行數據錄入時,資料庫能夠通過這個規則、約束、規範檢查所錄入的數據,防止錯誤及不符合要求數據的錄入。本文主要介紹數據表欄位約束類型及其基本語法,為下一步創建數據表提供基礎與依據。
01數據表基本結構
MySQL是主流關係型資料庫管理系統之一,我們之所以指出關係型數據主要目的在於關係型數據管理系統存儲的是結構化數據,即採用二維表格實現數據的存儲。如我們要存儲學生基本信息,主要包括學生學號、姓名、出生日期等相關信息,採用二維表格存儲形式描述如下:
數據表基本結構描述如上圖所示,使用二維表格實現數據存儲。在上圖中每一列稱為一個屬性或者欄位。其中第一行的每一列為欄位(屬性)名稱。第一行下面的每一行稱為記錄,即一條記錄。記錄是存儲結構化數據的基本單元。在實際進行欄位設置及值存儲過程中,需要結合實際情況確定每一個欄位存儲數據的格式,規範與要求。這些規範格式等即為欄位的約束。如學生的聯繫電話不允許出現重複,就需要定義與之對應的欄位約束。
02MySQL數據表欄位約束
MySQL資料庫管理系統數據表欄位約束主要包括主鍵約束、外鍵約束、默認值約束、唯一約束、空值約束、自動增長約束等。主要約束概念及語法說明如下:
1、主鍵約束 Primary Key
主鍵的概念:記錄的唯一標識,能夠通過該標識確定唯一一條記錄。如上表中唯一能夠確定學生記錄的只能是學號,因此學號是主鍵。主鍵是不允許為空,不允許出現重複。可以在定義數據表欄位時給欄位添加主鍵約束。語法結構為 :
//欄位名稱 數據類型 主鍵約束
id varchar(14) primary key
如上表所示,定義學生學號欄位名稱為id ,數據類型為可變長度字符串,長度為14 ,設置其為主鍵。
在定義主鍵時需要注意多欄位組合形式主鍵的定義,在很多情況下我們的主鍵需要由多個欄位所組成,如學生成績信息表,主要欄位包括學號、課程編號、成績。針對該表主鍵為學號與課程編號組合。
primary key(id,cid)
//id指學號
//cid指課程編號
2、外鍵約束 Foreign Key
外鍵約束主要針對多個表之間的關係進行描述,外鍵的定義描述如下:
對於欄位F在表A中不是主鍵,但在另外一個表B中表示主鍵,這個時候欄位F對於表A可稱為外鍵,在定義過程中需指明F在哪個表中是主鍵。另外需要注意,兩個表中並不需要都是用F作為欄位名,只要兩者存儲數據含義與類型一致即可。為說明外鍵約束,我們使用學生基本信息表與班級信息表進行說明,表結構存儲數據描述如下圖:
如上表所示,學生信息表與班級信息表中均存在一個班級編號欄位,在學生信息表中,該欄位不表示任何鍵,但在班級信息表中編輯編碼為主鍵,因此相對於學生信息表,班級編號為外鍵。實現語法描述如下:
constraint stu_class_fk foreign key (class_id) references classinfor(class_id)
//由於存在外鍵關係需要首先定義班級信息表classinfor,再定義學生信息表
// 在定義學生信息表stuinfor中定義外鍵約束
//stu_class_fk表示外鍵名稱
//references表示外鍵依賴關係
3、默認值約束 default
默認值約束主要用於實現為欄位提供統一的默認值,如學生信息表中,所有的班級編號欄位都取值1,為簡化操作,我們可以直接為班級編號定義默認值約束,取值為1,在後期錄入數據時,可直接去掉對該欄位的數據錄入。在定義欄位時可直接指明默認值,基本語法:
欄位名稱 數據類型 默認值
class_id varchar(4) default 「1」;
//設置學生信息表中學號欄位默認值為1
4、唯一約束unique
唯一約束主要用於約束欄位取值的唯一性,有些情況下需要在錄入數據時保存數據的唯一性,如在上表學生信息表中,需要學生的聯繫電話唯一,即該欄位不允許輸入重複的值。示例代碼如下:
欄位名稱 數據類型 unique
stu_tel varchar(14) unique
//設置學生電話欄位名稱為stu_tel
//類型為長度14字符串
//唯一約束
5、空值約束 NULL
欄位允許取空值則可使用空值約束,默認情況下,欄位是允許為空的。如我們創建一個學生成績表,在錄入成績之前需要將學號,課程編號寫入數據表,但是允許成績為空時,對成績欄位設置允許為空。代碼說明如下:
欄位名稱 數據類型 null | not null
stu_score float(4) null
//設置學生成績欄位名稱為stu_score
//類型為浮點型
//設置允許為空
6、自動增長約束 auto_increment
自動增長可以理解為一種約束,也可以理解為一種數據類型。是指某一個欄位值依次增長,且不重複,(序號)在這種情況下可以將其設置為自動增長類型。如我們可以將班級信息表中的班級編號設置為自動增長欄位:
class_id int auto_increment primary key;
//班級編號 class_id
//數據類型 int整數
//自動增長,默認初始值1,增量1
//主鍵 primary key
本百家條號長期關注編程資訊分享;編程課程、素材、代碼分享及編程培訓。如果您對以上方面有興趣或代碼錯誤、建議與意見,可在評論區回復。更多程序設計相關教程及實例分享,期待大家關注與閱讀!