文章目錄
- 表的約束
- 什么是表的約束
- 空屬性
- 默認值
- 列描述(comment)
- 零填充(zerofill)
- 主鍵
- 總結
表的約束
什么是表的約束
表的約束(Constraints)是數據庫表中的規則,用于限制存儲的數據,保證數據的完整性、一致性和準確性。
下面我們講講具體的表的約束
空屬性
- 兩個值:null(默認的)和not null(不為空)
- 數據庫默認字段基本都是字段為空,但是實際開發時,盡可能保證字段不為空,因為數據為空沒辦法參與運算。
我們先默認創建一張表:
可以看見,當我們不指定約束條件的時候,創建表時默認會給Null約束條件添加上Yes,表示這里可以插入null。我們來試試。
插入數據:
我們重新創建一張設置為not null。
當表的這個屬性被設置為No時,就表示不能插入Null了。
默認值
默認值:某一種數據會經常性的出現某個具體的值,可以在一開始就指定好,在需要真實數據的時候,用戶可以選擇性的使用默認值。
拿我們剛剛創建的表為例:
這個約束就是默認值,如果設置了默認值,當我們插入的時候忽略這一項時,就會拿默認值當中的數據進行填充。
我們來設置一下默認值,一數據沒有默認值,一個數據有默認值。
設置默認值只需要在建表的時候在后面加上default即可,我們來插入數據:
可以看見這里雖然沒有設置默認值,但是默認值被默認設置為了Null,因為我們沒有設置not null,所以是會默認填入null的。
當將null約束設置為not null的時候就就不能忽略了。
列描述(comment)
列描述:comment,沒有實際含義,專門用來描述字段,會根據表創建語句保存,用來給程序員或DBA
來進行了解。
列描述就類似于在我們寫代碼時的注釋。
這就是列描述,用來描述這一列是用來干嘛的。
零填充(zerofill)
在 MySQL 中,ZEROFILL 是一種數值列的格式化屬性,用于自動在數值前補零,使其達到指定的寬度。
我們創建一張表,不加任何約束是這樣的,當我們加上zerofill之后:
可以看見,修改完zerofill約束條件之后,int后面多了一個10,后面多了一個zerofill,為什么10后面講,我們先講這個zerofill屬性添加之后有什么影響:
可以看見,添加了zerofill屬性的列前面多出了很多個0,這是為什么呢,我們加上前面的0,一共有10為數,所以這個10,就是位數,當我們插入一個數的時候,如果這個數的位數小于int后面的數,那么我們會在前面自動補上0,如果這數的位數是大于int后面括號中的數時,是多少就是多少。
主鍵
**主鍵(Primary Key)**是關系數據庫中用于唯一標識表中每一行記錄的一個或多個字段的組合。
可能很多人看到這句話之后也不是很理解什么是主鍵,那么我們創建一張表,來解釋一下什么是主鍵:
當我們創建表的時候,只需要在后面加上primary key,就表示這一列是主鍵,我們來插入一點數據,來具體看看主鍵是什么:
我們設置的id是主鍵,當我們插入第一組值的時候,id是1,當我們插入第二組值的時候id也是1,MySQL就不讓我插入了,但是當我們插入的值是2的時候,MySQL又讓我們插入了。
所以,被設為主鍵的列當中的數據時唯一的,不能有重復。
復合主鍵
什么是復合主鍵呢,我們上面是一列是主鍵,但是主鍵不一定只有一列,可以有多列啊,這被稱為復合主鍵,我們來設置一下復合主鍵:
這就是設置復合主鍵,我們來看看復合主鍵有什么特征:
a和b都被設置為了主鍵。
我們來插入幾組值試試:
插入三組值已經足夠說明問題了。
結論:當我們插入的被設為主鍵的值和歷史上插入過的數據都相同時,是不被允許插入的,但是當我們插入的數據只有一個是和歷史上的數據是相同的,是可以被允許的。
總結
在本文中,我們深入探討了 MySQL 中幾個常用的表約束,包括 NULL 約束、DEFAULT 約束、COMMENT 約束、主鍵約束以及 ZEROFILL 約束。這些約束在數據庫設計中扮演著至關重要的角色,通過它們可以確保數據的有效性和完整性,幫助開發者避免無效數據的插入,并提升數據表的可維護性。掌握這些約束的使用,能夠讓我們在實際開發中構建出更加健壯和清晰的數據庫結構,從而提升系統的穩定性和可擴展性。希望通過本文的介紹,大家對 MySQL 的表約束有了更深入的理解,并能夠在實際項目中靈活應用。