天天看點

資料庫之表的唯一、自增等七大限制

真正限制字段的是資料類型,但是資料類型限制很單一,需要有一些額外的限制,更好的保證資料的合法性,從業務邏輯角度保證資料的正确性。

今天我們一起使用一下主要的幾個限制,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為空值的資料:

資料庫之表的唯一、自增等七大限制