mysql的約束及實例分析
為什么要有約束?
我們在收集一些數據的時候會要求該數據必須存在
比如說像是國家在登記公民信息的時候身份證一欄是必須要填寫的不能為空
真正約束字段的是數據類型,但是數據類型約束很單一,需要有一些額外的約束,更好的保證數據的合 法性,從業務邏輯角度保證數據的正確性。比如有一個字段是email,要求是唯一的
表的約束很多,這里主要介紹如下幾個: null/not null,default, comment, zerofill,primary key,auto_increment,unique key 。
空屬性數據庫默認字段基本都是字段為空,但是實際開發時,盡可能保證字段不為空,因為數據為空沒辦法參與運算
所以說對于一些屬性我們要設置為非空
語法
not null實例
我們這里創建一個班級表 其中包含班級名和所在的教室
在外面正常的邏輯中 班級和教室都是不能為空的
如果班級名為空我們就不知道自己在哪個班如果教室為空我們就不知道自己在哪個教室
所以說我們在設計數據表的時候加上非空約束
默認值:某一種數據會經常性的出現某個具體的值,可以在一開始就指定好,在需要真實數據的時候, 用戶可以選擇性的使用默認值。
語法
default xxx我們插入一個數據嘗試
我們這里只插入了值zhangsna但是age和sex都自動填寫了
有了default之后還需要設置非空嘛?
不需要 因為如果我們沒有填值的話 系統會給我們填上默認值 所以說就不存在空值的情況了
列描述列描述:comment,沒有實際含義,專門用來描述字段,會根據表創建語句保存,用來給程序員或DBA來進行了解。
語法
comment ‘xxx'此外我們可以通過查看創建語句來看到對于每個列的描述
實例
剛開始學習數據庫時,很多人對數字類型后面的長度很迷茫
比如說在下圖中 int類型后面的11是什么意思呢?
整型不是4字節碼?這個10又代表什么呢?其實沒有zerofill這個屬性,括號內的數字是毫無意義的
此時我們修改t8中age類型的屬性 在后面加上zerofill
此時我們發現age的18前面補上了三個0
也就是說zerofill的意義其實是看該類型有沒有達到指定的位數 如果沒有達到就在前面加上0填充
主鍵主鍵:primary key用來唯一的約束該字段里面的數據,不能重復,不能為空,一張表中最多只能有一個主鍵;主鍵所在的列通常是整數類型。
語法
primary key實例
我們創建一張表 id作為主鍵 name作為非空列
主鍵約束
主鍵中的值不能重復 一旦重復就會報錯 下面是示例
我們可以看到插入重復id時sql直接報錯了
刪除主鍵
語法
alter table 表名 drop primary key;添加主鍵
語法
alter table 表名 add primary key(字段列表)復合主鍵
在創建表的時候,在所有字段之后,使用primary key(主鍵字段列表)來創建主鍵,如果有多個字段 作為主鍵,可以使用復合主鍵
比如說在創建學生的課程表的時候學生id和課程號都是可以重復的 但是學生id和課程號的組合確是不能重復的 所以說我們要將他們設置為復合主鍵
語法
primary key(xxx , yyy)auto_increment:當對應的字段,不給值,會自動的被系統觸發,系統會從當前字段中已經有的最大值+1操作,得到一個新的不同的值。通常和主鍵搭配使用,作為邏輯主鍵。
自增長的特點:
任何一個字段要做自增長,前提是本身是一個索引(key一欄有值)自增長字段必須是整數一張表最多只能有一個自增長
語法:
auto_increment下面是實例
我們開始插入名字 之后查看id的變化情況
我們發現id數據是從1開始依次往后遞增
那么如果我們現在插入一個id為1000的數據之后的id會如何變化呢?
我們可以發現后面的id從1001開始自增了
唯一鍵在了解唯一鍵之前我們首先要明白一個概念
并不是因為我們選擇一個屬性成為了主鍵這個屬性才具有了唯一性 而是我們選擇了一個具有唯一性的屬性成為了主鍵
也就是說除了主鍵之間還有很多數據也可能具有唯一性 這也就是我們唯一鍵出現的原因
語法
unique下面是實例
當一個數據成為唯一鍵之后那么這個數據就不能重復了
外鍵外鍵用于定義主表和從表之間的關系:外鍵約束主要定義在從表上,主表則必須是有主鍵約束或unique約束。
當定義外鍵后,要求外鍵列數據必須在主表的主鍵列存在或為null。
我們先來看最后一句加粗的話 也就是說主表中必須有數據從表中才能插入數據
語法:
foreign key (class_id) references myclass(id)下面是實例 我們先創建主表 之后再從表中創建外鍵約束
我們首先像從表中插入數據嘗試
我們可以發現主表中如果沒有插入數據從表中是不能插入的
而主表中有數據 從表中就可以插入數據了
而我們刪除數據的時候必須要先刪除從表中的數據才能刪除主表
這里總結下
外鍵是在從表中定義的從表添加數據必須主表先添加主表刪除數據必須從表先刪除
我們如何理解外鍵約束
首先這是一種約束 它肯定是為了防止我們做出錯誤或不符合邏輯的操作的
理論上,上面的例子,我們不創建外鍵約束,就正常建立學生表,以及班級表,該有的字段我們都有。
但是實際過程中由于可能會由于人為操作的失誤而造成一些錯誤 比如說一些數據只有學生表中有 而不存在于班級表中(這樣就不知道這個學生在哪個班了)
所以說我們添加外鍵約束是必須的 它的本質其實就是將插入和刪除數據的合法性交給mysql去審核
總結到此這篇關于mysql的約束及實例分析的文章就介紹到這了,更多相關mysql的約束內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章:
