真正限制字段的是資料類型,但是資料類型限制很單一,需要有一些額外的限制,更好的保證資料的合法性,從業務邏輯角度保證資料的正确性。
今天我們一起使用一下主要的幾個限制,null/not null,default, comment, zerofill,primary key,auto_increment,unique。
1、空屬性
有兩個取值,null(預設)和not null(此列屬性不允許為空,必須做資料插入)。
資料庫預設字段基本都是字段為空,但是實際開發時,盡可能保證字段不為空,因為資料為空沒辦法參與運算。
舉例使用null:

使用not null:
在tt1中我們将per_age設為not null,我們可以觀察到,
第一次插入資料時隻給per_age設定了值,成功。
第二次,隻給per_name設定了值,失敗。
2、預設值-default
如果某一種資料會經常性的出現某個具體的值,可以在一開始就指定好,在需要真實資料的時候,使用者可以選擇性的使用預設值。
eg,建立表如下(預設值一般與not null配合使用 ):
插入如下資料,觀察結果:
是以,預設值的生效:資料在插入的時候不給該字段指派,就使用預設值
我們看一下時間戳的預設值:
(desc:檢視表的結構)
注意,set和enum不允許設預設值。
3、列描述-comment
comment,沒有實際含義,專門用來描述字段,會根據表建立語句儲存,用來給程式員或DBA來進行了解。
eg,建立表如下:
觀察上圖,我們用desc是檢視不到comment的描述資訊的。
我們學一條指令show(檢視目前資料庫的描述資訊),如下:
(\G是為了讓檢視結果格式整齊)
這樣,肯定有人以為和注釋是一樣的,其實不然,comment不等同于注釋。
測試如下:
(注釋用– )
觀察到用desc兩者都看不到,我們用show試試:
可以看到注釋是看不出來的。
4、zerofill -自動填充0
如果某一數值列規定了zerofill,則自動把此列變為無符号整數。
若規定了zerofill的資料列,如果資料長度沒有達到規定長度,則在資料前自動填充0,
eg: int(5) zerofill 123 –>00123
舉例如下:
建立表:
檢視表結構:
可以看到此列變為無符号整數。
我們插入資料:
因為我們設定了5位,而資料隻有3位,是以前兩次自動填充為0。
那如果資料大于5位呢?如下:
則沒有必要填充。
需要注意的是,zerofill屬性隻是設定了一種格式化輸出而已,資料庫内部存儲的還是本來的數。
我們可以用hex函數來觀察,如下:
5、主鍵限制 - primary key
主鍵用于唯一限制字段資料,使用主鍵限制的字段,不能為空,不能重複。
主鍵所在的列為整數類型,一張表有且隻有一個主鍵。
主鍵有單主鍵和複合主鍵之分。
單主鍵
舉例如下:
檢視表結構,id的key值為PRI,id為主鍵
插入資料:
如上圖,第一次插入id相同,插入失敗,證明主鍵不能重複。
第二次插入成功。
複合主鍵
多個屬性組合起來不能重複 eg:1-101
舉例如下:
id-sushe為複合主鍵,如下,id和sushe的key值都為PRI.
插入資料:
成功,插入了1-101即2-101兩組資料。
再插入資料,
因為2-101重複,插入失敗。
删除主鍵
alter table 表名 drop primary key;
我們以上例中tt7為例:
删除後我們插入重複的數就可以了:
建立表以後追加主鍵
alter table 表名 add primary key(字段1);
注意:字段1不能為空,不能重複。
6、自增長-auto_increment
auto_increment:當對應的字段,不給值,會自動的被系統觸發,系統會從目前字段中已經有的最大值+1操作, 得到一個新的不同的值。
注意:任何一個字段要自增長,前提是本身為索引,(key有值)、自增長必須為整數、一張表有且隻能有一個自增長
主鍵和自增長搭配使用:
id+auto_increment:邏輯主鍵
舉例如下:
檢視表結構可以看出來id為自增長。
插入資料:
可以看出自增值是從1開始的。
若我們設定了自增數值呢?
如下:
證明了系統會從目前字段中已經有的最大值+1操作, 得到一個新的不同的值。
那若我們删掉我們設定的數呢?
現在隻剩下1和2了,我們插入資料:
發現是接着之前最大的數的。
**是以,若指定自增數值後,以後的數依次為基礎。
若删除指定列後,還是以最大值(已經達到的值)為基礎自增。**
7、唯一鍵-unique
一張表中有往往有很多字段需要唯一性,資料不能重複,但是一張表中隻能有一個主鍵:唯一鍵就可以解決表中有多個字段需要唯一性限制的問題。
唯一鍵的本質和主鍵差不多,唯一鍵允許為空,但不能重複,一張表可以有多個字段設定唯一,而且可以多個為空,空字段不做唯一性比較,也就是說可以允許多個null值。
證明不能重複,舉例如下,id為唯一鍵:
插入資料:
再插入:
插入失敗。
對于空值,插入:
再次插入id為空值的資料: