欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1、空屬性

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

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

舉例使用null:

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

使用not null:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3、列描述-comment

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

eg,新建表如下:

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

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

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

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

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

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

測(cè)試如下:

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

(注釋用– )

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

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

可以看到注釋是看不出來(lái)的。

4、zerofill -自動(dòng)填充0

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

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

eg: int(5) zerofill 123 –>00123

舉例如下:

新建表:

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

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

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

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

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

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

因?yàn)槲覀冊(cè)O(shè)置了5位,而數(shù)據(jù)只有3位,因此前兩次自動(dòng)填充為0。

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

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

則沒有必要填充。

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

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

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

5、主鍵約束 - primary key

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

單主鍵

舉例如下:

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

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

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

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

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

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

第二次插入成功。

復(fù)合主鍵

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

舉例如下:

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

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

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

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

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

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

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

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

因?yàn)?-101重復(fù),插入失敗。

刪除主鍵

alter table 表名 drop primary key;

我們以上例中tt7為例:

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

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

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

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

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

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

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

6、自增長(zhǎng)-auto_increment

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

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

主鍵和自增長(zhǎng)搭配使用:

id+auto_increment:邏輯主鍵

舉例如下:

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

查看表結(jié)構(gòu)可以看出來(lái)id為自增長(zhǎng)。

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

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

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

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

如下:

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

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

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

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

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

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

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

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

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

7、唯一鍵-unique

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

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

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

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

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

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

再插入:

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

插入失敗。

對(duì)于空值,插入:

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

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

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

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

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

相關(guān)文章

最新評(píng)論