亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入理解數(shù)據(jù)庫之表的唯一、自增等七大約束

 更新時間:2023年09月04日 14:42:24   作者:honeyR  
真正約束字段的是數(shù)據(jù)類型,但是數(shù)據(jù)類型約束很單一,需要有一些額外的約束,更好的保證數(shù)據(jù)的合法性,從業(yè)務(wù)邏輯角度保證數(shù)據(jù)的正確性,本文就來介紹一下數(shù)據(jù)庫之表的唯一、自增等七大約束,感興趣的可以了解一下

真正約束字段的是數(shù)據(jù)類型,但是數(shù)據(jù)類型約束很單一,需要有一些額外的約束,更好的保證數(shù)據(jù)的合法性,從業(yè)務(wù)邏輯角度保證數(shù)據(jù)的正確性。今天我們一起使用一下主要的幾個約束,null/not null,default, comment, zero?ll,primary key,auto_increment,unique。

1、空屬性

有兩個取值,null(默認(rèn))和not null(此列屬性不允許為空,必須做數(shù)據(jù)插入)。

數(shù)據(jù)庫默認(rèn)字段基本都是字段為空,但是實際開發(fā)時,盡可能保證字段不為空,因為數(shù)據(jù)為空沒辦法參與運(yùn)算。

舉例使用null:

數(shù)據(jù)庫之表的唯一、自增等七大約束_comment ? ?

使用not null:

數(shù)據(jù)庫之表的唯一、自增等七大約束_zerofill ?_02

在tt1中我們將per_age設(shè)為not null,我們可以觀察到,

第一次插入數(shù)據(jù)時只給per_age設(shè)置了值,成功。

第二次,只給per_name設(shè)置了值,失敗。

2、默認(rèn)值-default

如果某一種數(shù)據(jù)會經(jīng)常性的出現(xiàn)某個具體的值,可以在一開始就指定好,在需要真實數(shù)據(jù)的時候,用戶可以選擇性的使用默認(rèn)值。

eg,新建表如下(默認(rèn)值一般與not null配合使用 ):

數(shù)據(jù)庫之表的唯一、自增等七大約束_自增長_03

插入如下數(shù)據(jù),觀察結(jié)果:

數(shù)據(jù)庫之表的唯一、自增等七大約束_主鍵_04

所以,默認(rèn)值的生效:數(shù)據(jù)在插入的時候不給該字段賦值,就使用默認(rèn)值

我們看一下時間戳的默認(rèn)值:

數(shù)據(jù)庫之表的唯一、自增等七大約束_自增長_05

(desc:查看表的結(jié)構(gòu))

注意,set和enum不允許設(shè)默認(rèn)值。

3、列描述-comment

comment,沒有實際含義,專門用來描述字段,會根據(jù)表創(chuàng)建語句保存,用來給程序員或DBA來進(jìn)行了解。

eg,新建表如下:

數(shù)據(jù)庫之表的唯一、自增等七大約束_comment ? ?_06

觀察上圖,我們用desc是查看不到comment的描述信息的。

我們學(xué)一條命令show(查看當(dāng)前數(shù)據(jù)庫的描述信息),如下:

數(shù)據(jù)庫之表的唯一、自增等七大約束_unique_07

(\G是為了讓查看結(jié)果格式整齊)

這樣,肯定有人以為和注釋是一樣的,其實不然,comment不等同于注釋。

測試如下:

數(shù)據(jù)庫之表的唯一、自增等七大約束_zerofill ?_08

(注釋用– )

觀察到用desc兩者都看不到,我們用show試試:

數(shù)據(jù)庫之表的唯一、自增等七大約束_zerofill ?_09

可以看到注釋是看不出來的。

4、zerofill -自動填充0

如果某一數(shù)值列規(guī)定了zerofill,則自動把此列變?yōu)闊o符號整數(shù)。

若規(guī)定了zerofill的數(shù)據(jù)列,如果數(shù)據(jù)長度沒有達(dá)到規(guī)定長度,則在數(shù)據(jù)前自動填充0,

eg: int(5) zerofill 123 –>00123

舉例如下:

新建表:

數(shù)據(jù)庫之表的唯一、自增等七大約束_自增長_10

查看表結(jié)構(gòu):

數(shù)據(jù)庫之表的唯一、自增等七大約束_zerofill ?_11

可以看到此列變?yōu)闊o符號整數(shù)。

我們插入數(shù)據(jù):

數(shù)據(jù)庫之表的唯一、自增等七大約束_comment ? ?_12

因為我們設(shè)置了5位,而數(shù)據(jù)只有3位,因此前兩次自動填充為0。

那如果數(shù)據(jù)大于5位呢?如下:

數(shù)據(jù)庫之表的唯一、自增等七大約束_comment ? ?_13

則沒有必要填充。

需要注意的是,zero?ll屬性只是設(shè)置了一種格式化輸出而已,數(shù)據(jù)庫內(nèi)部存儲的還是本來的數(shù)。

我們可以用hex函數(shù)來觀察,如下:

數(shù)據(jù)庫之表的唯一、自增等七大約束_unique_14

5、主鍵約束 - primary key

主鍵用于唯一約束字段數(shù)據(jù),使用主鍵約束的字段,不能為空,不能重復(fù)。主鍵所在的列為整數(shù)類型,一張表有且只有一個主鍵。主鍵有單主鍵和復(fù)合主鍵之分。

單主鍵

舉例如下:

數(shù)據(jù)庫之表的唯一、自增等七大約束_自增長_15

查看表結(jié)構(gòu),id的key值為PRI,id為主鍵

數(shù)據(jù)庫之表的唯一、自增等七大約束_zerofill ?_16

插入數(shù)據(jù):

數(shù)據(jù)庫之表的唯一、自增等七大約束_comment ? ?_17

如上圖,第一次插入id相同,插入失敗,證明主鍵不能重復(fù)。

第二次插入成功。

復(fù)合主鍵

多個屬性組合起來不能重復(fù) eg:1-101

舉例如下:

數(shù)據(jù)庫之表的唯一、自增等七大約束_unique_18

id-sushe為復(fù)合主鍵,如下,id和sushe的key值都為PRI.

數(shù)據(jù)庫之表的唯一、自增等七大約束_zerofill ?_19

插入數(shù)據(jù):

數(shù)據(jù)庫之表的唯一、自增等七大約束_自增長_20

成功,插入了1-101即2-101兩組數(shù)據(jù)。

再插入數(shù)據(jù),

數(shù)據(jù)庫之表的唯一、自增等七大約束_自增長_21

因為2-101重復(fù),插入失敗。

刪除主鍵

alter table 表名 drop primary key;

我們以上例中tt7為例:

數(shù)據(jù)庫之表的唯一、自增等七大約束_zerofill ?_22

刪除后我們插入重復(fù)的數(shù)就可以了:

數(shù)據(jù)庫之表的唯一、自增等七大約束_comment ? ?_23

創(chuàng)建表以后追加主鍵

alter table 表名 add primary key(字段1);

注意:字段1不能為空,不能重復(fù)。

數(shù)據(jù)庫之表的唯一、自增等七大約束_主鍵_24

6、自增長-auto_increment

auto_increment:當(dāng)對應(yīng)的字段,不給值,會自動的被系統(tǒng)觸發(fā),系統(tǒng)會從當(dāng)前字段中已經(jīng)有的最大值+1操作, 得到一個新的不同的值。

注意:任何一個字段要自增長,前提是本身為索引,(key有值)、自增長必須為整數(shù)、一張表有且只能有一個自增長

主鍵和自增長搭配使用:

id+auto_increment:邏輯主鍵

舉例如下:

數(shù)據(jù)庫之表的唯一、自增等七大約束_comment ? ?_25

查看表結(jié)構(gòu)可以看出來id為自增長。

插入數(shù)據(jù):

數(shù)據(jù)庫之表的唯一、自增等七大約束_unique_26

可以看出自增值是從1開始的。

若我們設(shè)置了自增數(shù)值呢?

如下:

數(shù)據(jù)庫之表的唯一、自增等七大約束_zerofill ?_27

證明了系統(tǒng)會從當(dāng)前字段中已經(jīng)有的最大值+1操作, 得到一個新的不同的值。

那若我們刪掉我們設(shè)置的數(shù)呢?

數(shù)據(jù)庫之表的唯一、自增等七大約束_unique_28

現(xiàn)在只剩下1和2了,我們插入數(shù)據(jù):

數(shù)據(jù)庫之表的唯一、自增等七大約束_comment ? ?_29

發(fā)現(xiàn)是接著之前最大的數(shù)的。

**因此,若指定自增數(shù)值后,以后的數(shù)依次為基礎(chǔ)。

若刪除指定列后,還是以最大值(已經(jīng)達(dá)到的值)為基礎(chǔ)自增。**

7、唯一鍵-unique

一張表中有往往有很多字段需要唯一性,數(shù)據(jù)不能重復(fù),但是一張表中只能有一個主鍵:唯一鍵就可以解決表中有多個字段需要唯一性約束的問題。

唯一鍵的本質(zhì)和主鍵差不多,唯一鍵允許為空,但不能重復(fù),一張表可以有多個字段設(shè)置唯一,而且可以多個為空,空字段不做唯一性比較,也就是說可以允許多個null值。

證明不能重復(fù),舉例如下,id為唯一鍵:

數(shù)據(jù)庫之表的唯一、自增等七大約束_自增長_30

插入數(shù)據(jù):

數(shù)據(jù)庫之表的唯一、自增等七大約束_主鍵_31

再插入:

數(shù)據(jù)庫之表的唯一、自增等七大約束_zerofill ?_32

插入失敗。

對于空值,插入:

數(shù)據(jù)庫之表的唯一、自增等七大約束_unique_33

再次插入id為空值的數(shù)據(jù):

數(shù)據(jù)庫之表的唯一、自增等七大約束_主鍵_34

證明了空字段不做唯一性比較,可以允許多個null值。

到此這篇關(guān)于深入理解數(shù)據(jù)庫之表的唯一、自增等七大約束的文章就介紹到這了,更多相關(guān)數(shù)據(jù)庫七大約束內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論