
系列文章目錄
文章目錄
- 系列文章目錄
- 前言
- 一、表的約束
- 二、空屬性
- 三、默認值
- 四、列描述
- 五、zerofill
- 六、主鍵
- 七、自增長
- 八、唯一鍵
- 九、外鍵
- 總結
前言
一、表的約束

真正約束欄位的是資料型別,但是資料型別約束很單一,需要有一些額外的約束,更好的保證資料的合法性,從業務邏輯角度保證資料的正確性,比如有一個欄位是email,要求是唯一的,表的約束很多,這里主要介紹如下幾個: null/not null,default, comment, zerofill,primary key,auto_increment,unique key ,
二、空屬性

- 兩個值:null(默認的)和not null(不為空)
- 資料庫默認欄位基本都是欄位為空,但是實際開發時,盡可能保證欄位不為空,因為資料為空沒辦法參與運算,

三、默認值
默認值:某一種資料會經常性的出現某個具體的值,可以在一開始就指定好,在需要真實資料的時候,用戶可以選擇性的使用默認值,


默認值的生效:資料在插入的時候不給該欄位賦值,就使用默認值,

四、列描述

列描述:comment,沒有實際含義,專門用來描述欄位,會根據表創建陳述句保存,用來給程式員或DBA來進行了解,


五、zerofill

剛開始學習資料庫時,很多人對數字型別后面的長度很迷茫,通過show看看t6表的建表陳述句:

可以看到int(5),這個代表什么意思呢?整型不是4位元組碼?這個5又代表什么呢?其實沒有zerofill這個屬性,括號內的數字是毫無意義的,id列就是前面插入的資料,如下:

但是對列添加了zerofill屬性后,顯示的結果就有所不同了,修改t6表的屬性:
alter table t6 change id a int(5) unsigned zerofill;
這次可以看到a的值由原來的1變成00001,這就是zerofill屬性的作用,如果寬度小于設定的寬度(這里設定的是5),自動填充0,要注意的是,這只是最后顯示的結果,在MySQL中實際存盤的還是1,為什么是這樣呢?我們可以用hex函式來證明,

可以看出資料庫內部存盤的還是1,00001只是設定了zerofill屬性后的一種格式化輸出而已,
六、主鍵

主鍵:primary key用來唯一的約束該欄位里面的資料,不能重復,不能為空,一張表中最多只能有一個主鍵;主鍵所在的列通常是整數型別,

主鍵約束:主鍵對應的欄位中不能重復,一旦重復,操作失敗,


在創建表的時候,在所有欄位之后,使用primary key(主鍵欄位串列)來創建主鍵:

當表創建好以后,可以再次追加主鍵:

洗掉主鍵:
alter table 表名 drop primary key;
如果有多個欄位作為主鍵,可以使用復合主鍵:
mysql> create table tt14(
-> id int unsigned,
-> course char(10) comment ‘課程代碼’,
-> score tinyint unsigned default 60 comment ‘成績’,
-> primary key(id, course) – id和course為復合主鍵
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> desc tt14;
七、自增長

auto_increment:當對應的欄位,不給值,會自動的被系統觸發,系統會從當前欄位中已經有的最大值+1操作,得到一個新的不同的值,通常和主鍵搭配使用,作為邏輯主鍵,
- 自增長的特點:
- 任何一個欄位要做自增長,前提是本身是一個索引(key一欄有值),
- 自增長欄位必須是整數,
- 一張表最多只能有一個自增長,
在插入后獲取上次插入的 AUTO_INCREMENT 的值(批量插入獲取的是第一個值),


- 索引
- 在關系資料庫中,索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種存盤結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單,索引的作用相當于圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容,
- 索引提供指向存盤在表的指定列中的資料值的指標,然后根據您指定的排序順序對這些指標排序,資料庫使用索引以找到特定值,然后順指標找到包含該值的行,這樣可以使對應于表的SQL陳述句執行得更快,可快速訪問資料庫表中的特定資訊,
八、唯一鍵

一張表中有往往有很多欄位需要唯一性,資料不能重復,但是一張表中只能有一個主鍵:唯一鍵就可以解決表中有多個欄位需要唯一性約束的問題,
唯一鍵的本質和主鍵差不多,唯一鍵允許為空,而且可以多個為空,空欄位不做唯一性比較,
唯一鍵+not null=主鍵,

唯一鍵的本質和主鍵差不多,唯一鍵允許為空,


九、外鍵

外鍵用于定義主表和從表之間的關系:外鍵約束主要定義在從表上,主表則必須是有主鍵約束或unique約束,當定義外鍵后,要求外鍵列資料必須在主表的主鍵列存在或為null,
foreign key (欄位名) references 主表(列)
主表:沒有外鍵約束

附表:沒有外鍵約束


create table t15(stu_id int primary key auto_increment,stu_name varchar(10) not null,stu_class_id int not null,foreign key(stu_class_id) references t14(class_id));
總結
以上就是今天要講的內容,本文詳細介紹了資料庫表約束種類,資料庫提供了大量的方法供我們使用,非常的便捷,我們務必掌握,希望大家多多支持!另外如果上述有任何問題,請懂哥指教,不過沒關系,主要是自己能堅持,更希望有一起學習的同學可以幫我指正,但是如果可以請溫柔一點跟我講,愛與和平是永遠的主題,愛各位了,加油啊!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297787.html
標籤:其他





