首頁技術(shù)文章正文

JAVA培訓(xùn)之主鍵增長、非空及唯一約束

更新時(shí)間:2017-04-16 來源:黑馬程序員Java培訓(xùn)學(xué)院 瀏覽量:

主鍵增長、非空及唯一約束

1.主鍵自增長

MySQL提供了主鍵自動(dòng)增長的功能,所謂的自增長是指在用戶沒有給出主鍵值時(shí),MySQL數(shù)據(jù)庫會(huì)自動(dòng)為該條記錄生成一個(gè)主鍵值,這個(gè)主鍵值是在最大主鍵值的基礎(chǔ)上加1,這樣這個(gè)表中就不會(huì)出現(xiàn)重復(fù)的主鍵值。
設(shè)置主鍵自增長的關(guān)鍵詞是AUTO_INCREMENT,對應(yīng)的sql語句如下:
CREATE TABLE stu(
                   sid INT PRIMARY KEY AUTO_INCREMENT,
                   sname      VARCHAR(20),
                   age            INT,
                   gender     VARCHAR(10)
  );
設(shè)置主鍵自增長必須要求主鍵列的類型是整型,這樣才能完成自增長。
(1)下面我們來創(chuàng)建一個(gè)主鍵自增長的表,如圖1-1所示:
1554343254050_1.png
圖1-1 創(chuàng)建主鍵自增長的表
(2)表的主鍵雖然是自增長的,我們也可以在插入記錄時(shí)給出主鍵值,如圖1-2所示:
1554343260710_2.png
圖1-2 插入給定主鍵值的記錄
(3)再向stu3表中插入一條記錄,不給出主鍵值,然后再查詢stu3表的所有記錄,如圖1-3所示:
1554343275553_3.png
圖1-3 插入無主鍵的記錄
圖1-3中,第二次插入的記錄的主鍵值為1112,是第一次插入的記錄的主鍵值加1的結(jié)果,這就是MySQL數(shù)據(jù)庫底層主鍵自增長的算法,在當(dāng)前最大主鍵值的基礎(chǔ)上加1。
(4)現(xiàn)在將stu3表中的記錄全部刪除,然后再向該表中插入一條沒有主鍵值的記錄,如圖1-4所示:
1554343283791_4.png
圖1-4 查詢結(jié)果
圖1-3中,沒有刪除之前主鍵的最大值是1112,將記錄全部刪除之后再次插入一個(gè)無主鍵值的記錄,MySQL數(shù)據(jù)庫為它生成的主鍵值是1113,這表明MySQL數(shù)據(jù)庫會(huì)記錄當(dāng)前最大的主鍵值,無論有沒有記錄被刪除,再次添加無主鍵記錄時(shí)都會(huì)在它記錄的最大主鍵值的基礎(chǔ)上加1,然后賦給新紀(jì)錄的主鍵。
在以后的開發(fā)中,表的主鍵一般采用代理主鍵,所謂代理主鍵就是沒有特定含義的主鍵,例如,一個(gè)人的身份證號如果做主鍵的話,那么這個(gè)主鍵就不是一個(gè)代理主鍵,而是一個(gè)自然主鍵,因?yàn)樗砹艘欢ǖ暮x,我們一般不會(huì)使用自然主鍵。另外,主鍵自增長有一定的局限性,今后我們會(huì)使用UUID生成主鍵,這樣產(chǎn)生的主鍵永遠(yuǎn)不會(huì)重復(fù)。

2.非空約束

非空約束的作用與主鍵約束中的非空特性一樣,非空約束的關(guān)鍵詞是:NOT NULL,指定非空約束的列的值不能為null,其對應(yīng)的sql語句如下:
CREATE TABLE stu4(
                  sid INT PRIMARY KEY AUTO_INCREMENT,
                  sname VARCHAR(10) NOT NULL,
                  age            INT,
                  gender     VARCHAR(10)
);
這里我們就不再演示非空約束,如果一個(gè)列指定了非空約束,那么它的值就不能為空,否則會(huì)報(bào)錯(cuò)。

3.唯一約束

所謂唯一約束就是說指定唯一約束的列的值不能重復(fù),但是可以為null,它的關(guān)鍵詞是:UNIQUE,對應(yīng)的sql語句是:
CREATE TABLE tab_ab(
         sid INT PRIMARY KEY AUTO_INCREMENT,
         sname VARCHAR(10) UNIQUE
);
這里我們也不再演示唯一約束,以上sql語句中sname列上指定了唯一約束,那么sname列的值就不能重復(fù)。

本文版權(quán)歸黑馬程序員Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!

作者:黑馬程序員Java培訓(xùn)學(xué)院

首發(fā):http://pantone-color.com.cn/special/hmjavaeezly/

分享到:
在線咨詢 我要報(bào)名
和我們在線交談!