MySQL表的約束示例詳解
一.概念
真正約束字段的是數(shù)據(jù)類型,但是數(shù)據(jù)類型約束很單一,需要有一些額外的約束,更好的保證數(shù)據(jù)的合****法性。
表的約束:表中一定要有各種約束,通過約束,讓我們未來插入數(shù)據(jù)庫表中的數(shù)據(jù)是符合預(yù)期的。
約束的本質(zhì)是通過技術(shù)手段,倒逼程序員去插入正確的數(shù)據(jù)。
約束的最終目的,就是保證數(shù)據(jù)的完整性和可預(yù)期性。
二.非空約束
非空約束有兩個值:null(默認(rèn)的)和not null(不為空)。
數(shù)據(jù)庫中默認(rèn)創(chuàng)建的字段,如果不添加非空約束,基本都是可以為空,但是實際開發(fā)時,有些字段可能被要求必須添加數(shù)據(jù),因此必須設(shè)置為非空。同時應(yīng)該盡可能保證字段不為空,因為數(shù)據(jù)為空沒辦法參與運(yùn)算。
設(shè)置非空約束,需要在添加表格字段時,在后邊追加上 “not null”。當(dāng)某字段被設(shè)置非空后,如果添加數(shù)據(jù)時,未對該字段進(jìn)行數(shù)據(jù)添加,就會添加失敗。

三.默認(rèn)值
默認(rèn)值:某一種數(shù)據(jù)會經(jīng)常性的出現(xiàn)某個具體的值,可以在一開始就指定好,在需要真實數(shù)據(jù)的時候,用戶可以選擇性的使用默認(rèn)值。
設(shè)置默認(rèn)值,需要在字段后追加**“default 默認(rèn)值”,此后如果添加數(shù)據(jù)時未對該字段添加數(shù)據(jù),就會使用默認(rèn)值去填充數(shù)據(jù)**。

四.列描述
列描述:comment,沒有實際含義,專門用來描述字段,會根據(jù)表創(chuàng)建語句保存,用來給程序員或DBA來進(jìn)行了解。例如:
name varchar(20) not null comment ‘姓名';
五.主鍵
1.單主鍵
主鍵:primary key用來唯一的約束該字段里面的數(shù)據(jù),不能重復(fù),不能為空,一張表中最多只能有一個主鍵;主鍵所在的列通常是整數(shù)類型。
可以在創(chuàng)建表時即在字段后追加 “primary key” 設(shè)置該字段為主鍵字段。

添加數(shù)據(jù)時,主鍵字段不能為空,也不能出現(xiàn)數(shù)據(jù)重復(fù)。
創(chuàng)建表后,如果沒有設(shè)置主鍵字段,同樣可以追加設(shè)置
alter table 表名 add primary key(字段列表)
刪除主鍵
alter table 表名 drop primary key;
2.復(fù)合主鍵
MySQL規(guī)定一張表中主鍵只有一個,但是這不代表主鍵只能是一個字段,多個字段可以同時為主鍵,稱為復(fù)合主鍵。
創(chuàng)建復(fù)合主鍵,可以在創(chuàng)建表時,通過 “primary key(字段,字段…)” 的方式,例如:
primary key(id, class_room)
注意必須是新的一行代碼。
也可以通過上述追加的方式創(chuàng)建
alter table 表名 add primary key(字段,字段)
注意如果已經(jīng)存在一個單字段主鍵,必須先刪除該主鍵,才能重新創(chuàng)建復(fù)合主鍵。

復(fù)合主鍵中,其單獨(dú)的字段中,數(shù)據(jù)可以重復(fù),但是多個字段組成的數(shù)據(jù)集中,數(shù)據(jù)不能重復(fù)。
例如:先添加了一個(id,class_room)為(1,‘111’),的數(shù)據(jù),就不能添加第二個(1,‘111’),但是可以添加(1,‘112’)或(2,‘111’)。
六.自增長
auto_increment:當(dāng)對應(yīng)的字段被設(shè)置自增長后,如果不添加數(shù)據(jù),會自動的被系統(tǒng)觸發(fā),系統(tǒng)會從當(dāng)前字段中已經(jīng)有的最大值+1操作,得到一個新的不同的值。必須和主鍵搭配使用,作為邏輯主鍵。
自增長的特點(diǎn):
- 任何一個字段要做自增長,前提是本身是一個索引(key一欄有值)
- 自增長字段必須是整數(shù)
- 一張表最多只能有一個自增長
自增長可以在創(chuàng)建表時直接在對應(yīng)的主鍵字段后追加 “auto_increment”。

自增長默認(rèn)會從1開始,也可以在創(chuàng)建表時,在最后追加**“auto_increment=xxx”**,來設(shè)置自增長的初始值。
在插入后獲取上次插入的 AUTO_INCREMENT 的值(批量插入時獲取的是第一個值):
select last_insert_id();
七.唯一鍵
一張表中有往往有很多字段需要唯一性,數(shù)據(jù)不能重復(fù),但是一張表中只能有一個主鍵,唯一鍵就可以解決表中有多個字段需要唯一性約束的問題。
唯一鍵的本質(zhì)和主鍵差不多,唯一鍵允許為空,而且可以多個為空,空字段不做唯一性比較。
創(chuàng)建唯一鍵,可以在字段后追加**“unique” 。**

八.外鍵
外鍵用于定義主表和從表之間的關(guān)系:外鍵約束是指一個相同的字段,同時存在于兩張表中,比如學(xué)生表中存在一個“班級號字段”,班級表中同樣存在一個“班級號字段”,通過該字段將兩張表在邏輯上合二為一。
其中外鍵約束字段要定義在從表上,該字段在主表上則必須有主鍵約束或****unique 約束。當(dāng)定義外鍵后,要求外鍵列數(shù)據(jù)必須在主表的主鍵列存在或為null。
創(chuàng)建外鍵需要在從表中定義下述語句:
foreign key (字段名) references 主表(列);
一般來說,主表要包含從表,比如班級中包含學(xué)生,所以班級表為主表,學(xué)生表為從表。

外鍵約束的主要作用:
外鍵約束,主要是同時規(guī)范兩張表格的數(shù)據(jù)準(zhǔn)確性,例如如果在班級表中,只有班級id為101和102的兩個班級,那么在學(xué)生表中,如果添加班級id為103的數(shù)據(jù)信息,顯然是不合常理的,在外鍵約束下,添加數(shù)據(jù)就會失敗。
到此這篇關(guān)于MySQL表的約束示例詳解的文章就介紹到這了,更多相關(guān)mysql表的約束內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL提示Accessdeniedforuser‘‘@‘localhost‘”的解決方案
在使用MySQL數(shù)據(jù)庫的過程中,有時會遇到錯誤提示:“Access denied for user ''@'localhost'”,這個錯誤通常意味著MySQL服務(wù)器拒絕了當(dāng)前用戶的連接請求,本文將詳細(xì)探討該問題的原因及解決方法,需要的朋友可以參考下2025-01-01
通過.ibd文件恢復(fù)MySQL數(shù)據(jù)的全流程
.ibd 文件是 InnoDB 存儲引擎的核心數(shù)據(jù)文件,存儲表的行數(shù)據(jù)、索引及元信息,本文主要為大家介紹了通過.ibd文件恢復(fù)MySQL數(shù)據(jù)的全流程,需要的朋友可以參考下2025-11-11
MySQL觸發(fā)器的使用和inserted和deleted表介紹
這篇文章主要介紹了MySQL觸發(fā)器的使用和inserted和deleted表,觸發(fā)器,就是一種特殊的存儲過程,觸發(fā)器和存儲過程一樣是一個能夠完成特定功能和存儲在數(shù)據(jù)庫服務(wù)器上的SQL片段,感興趣想要詳細(xì)了解可以參考下文2023-05-05
macOS Sierra安裝Apache2.4+PHP7.0+MySQL5.7.16
這篇文章主要為大家詳細(xì)介紹了macOS Sierra安裝Apache2.4+PHP7.0+MySQL5.7.16的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01
MySQL常用類型轉(zhuǎn)換函數(shù)總結(jié)(推薦)
這篇文章主要介紹了MySQL常用類型轉(zhuǎn)換函數(shù)總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
MySQL多表關(guān)聯(lián)查詢相關(guān)練習(xí)題
這篇文章主要給大家介紹了關(guān)于MySQL多表關(guān)聯(lián)查詢的相關(guān)資料,在MySQL中JOIN語句是實現(xiàn)多表關(guān)聯(lián)查詢的關(guān)鍵,它可以將多個表格中符合條件的數(shù)據(jù)連接在一起,從而提供一個完整的查詢結(jié)果,需要的朋友可以參考下2023-10-10
MySQL的UPDATE(更新數(shù)據(jù))及語法詳解
MySQL的UPDATE語句是用于修改數(shù)據(jù)庫表中已存在的記錄,本文將詳細(xì)介紹UPDATE語句的基本語法、高級用法、性能優(yōu)化策略以及注意事項,幫助您更好地理解和應(yīng)用這一重要的SQL命令,感興趣的朋友跟隨小編一起看看吧2025-11-11

