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

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

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

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

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

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

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

外鍵約束的主要作用:
外鍵約束,主要是同時(shí)規(guī)范兩張表格的數(shù)據(jù)準(zhǔn)確性,例如如果在班級(jí)表中,只有班級(jí)id為101和102的兩個(gè)班級(jí),那么在學(xué)生表中,如果添加班級(jí)id為103的數(shù)據(jù)信息,顯然是不合常理的,在外鍵約束下,添加數(shù)據(jù)就會(huì)失敗。
到此這篇關(guān)于MySQL表的約束示例詳解的文章就介紹到這了,更多相關(guān)mysql表的約束內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PowerDesigner連接MySQL數(shù)據(jù)庫(kù)的詳細(xì)步驟
這篇文章主要介紹PowerDesigner連接MySQL數(shù)據(jù)庫(kù)的詳細(xì)步驟,文章通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)PowerDesigner連接MySQL數(shù)據(jù)庫(kù)有一定的幫助,需要的朋友可以參考下2023-09-09
MySQL普通表轉(zhuǎn)換為分區(qū)表實(shí)戰(zhàn)指南
本文將詳細(xì)指導(dǎo)新手開(kāi)發(fā)者如何將MySQL中的普通表轉(zhuǎn)換為分區(qū)表,分區(qū)表在處理龐大數(shù)據(jù)集時(shí)展現(xiàn)出顯著的性能優(yōu)勢(shì),不僅能大幅提升查詢速度,還能有效簡(jiǎn)化數(shù)據(jù)維護(hù)工作,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-06-06
Mysql樹(shù)形遞歸查詢的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Mysql樹(shù)形遞歸查詢的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
mysql中 ${param}與#{param}使用區(qū)別
這篇文章主要介紹了mysql中 ${param}與#{param}使用區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
使MySQL能夠存儲(chǔ)emoji表情字符的設(shè)置教程
這篇文章主要介紹了使MySQL能夠存儲(chǔ)emoji表情字符的設(shè)置教程,關(guān)鍵在于utf8mb4字符集的設(shè)置,需要的朋友可以參考下2015-12-12
Windows下修改mysql的data文件夾存放位置的方法
這篇文章主要介紹了在Windows下修改mysql的data文件夾存放位置的方法,需要的朋友可以參考下2014-03-03
MySQL優(yōu)化之如何寫出高質(zhì)量sql語(yǔ)句
在數(shù)據(jù)庫(kù)日常維護(hù)中,最常做的事情就是SQL語(yǔ)句優(yōu)化,因?yàn)檫@個(gè)才是影響性能的最主要因素。這篇文章主要給大家介紹了關(guān)于MySQL優(yōu)化之如何寫出高質(zhì)量sql語(yǔ)句的相關(guān)資料,需要的朋友可以參考下2021-05-05

