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

mysql數(shù)據(jù)庫約束有哪些?【Linux云計(jì)算+運(yùn)維開發(fā)培訓(xùn)】

更新時(shí)間:2021-05-26 來源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

為了防止數(shù)據(jù)表中插入錯(cuò)誤的數(shù)據(jù),在MySQL中,定義了一些維護(hù)數(shù)據(jù)庫完整性的規(guī)則,即表的約束。下表列舉了常見的表的約束。

1. 主鍵約束

在MySQL中,為了快速查找表中的某條信息,可以通過設(shè)置主鍵來實(shí)現(xiàn)。主鍵約束是通過PRIMARY KEY定義的,它可以唯一標(biāo)識(shí)表中的記錄,這就好比身份證可以用來標(biāo)識(shí)人的身份一樣。在MySQL中,主鍵約束分為兩種,具體如下。

1.1 單字段主鍵

單字段主鍵指的是由一個(gè)字段構(gòu)成的主鍵,其基本的語法格式如下所示:

字段名 數(shù)據(jù)類型 PRIMARY KEY

【案例】

創(chuàng)建一個(gè)數(shù)據(jù)表example01,并設(shè)置id作為主鍵,SQL語句如下:

CREATE TABLE example01(id INT PRIMARY KEY,
                          name VARCHAR(20),
                          grade FLOAT);

上述SQL語句執(zhí)行后,example01表中創(chuàng)建了id、name和grade三個(gè)字段,其中,id字段是主鍵。

1.2 多字段主鍵

多字段主鍵指的是多個(gè)字段組合而成的主鍵,其基本的語法格式如下所示:

PRIMARY KEY (字段名1,字段名2,…,字段名n)

在上述格式中,“字段名1,字段名2,…,字段名n”指的是構(gòu)成主鍵的多個(gè)字段的名稱。

【案例】 創(chuàng)建一個(gè)數(shù)據(jù)表example02,在表中將stu_id和course_id兩個(gè)字段共同作為主鍵,SQL語句如下:

CREATE TABLE example02(stu_id INT,
                       course_id INT,
                       grade FLOAT,
                       PRIMARY KEY(stu_id,course_id)
                       );

上述SQL語句執(zhí)行后,example02表中包含stu_id、course_id和grade三個(gè)字段,其中,stu_id和course_id兩個(gè)字段組合可以唯一確定一條記錄。

注意:每個(gè)數(shù)據(jù)表中最多只能有一個(gè)主鍵約束,定義為PRIMARY KEY的字段不能有重復(fù)值且不能為NULL值。

2. 非空約束

非空約束指的是字段的值不能為NULL,在MySQL中,非空約束是通過NOT NULL定義的,其基本的語法格式如下所示:

字段名 數(shù)據(jù)類型 NOT NULL;

【案例】 創(chuàng)建一個(gè)數(shù)據(jù)表example04,將表中的name字段設(shè)置為非空約束,SQL語句如下:

CREATE TABLE example04(id INT PRIMARY KEY,
                       name VARCHAR(20) NOT NULL,
                       grade FLOAT);

上述SQL語句執(zhí)行后,example04表中包含id、name和grade三個(gè)字段。其中,id字段為主鍵,name字段為非空字段。需要注意的是,在同一個(gè)數(shù)據(jù)表中可以定義多個(gè)非空字段。

3. 唯一約束

唯一約束用于保證數(shù)據(jù)表中字段的唯一性,即表中字段的值不能重復(fù)出現(xiàn)。唯一約束是通過UNIQUE定義的,其基本的語法格式如下所示:

字段名 數(shù)據(jù)類型 UNIQUE;

【案例】 創(chuàng)建一個(gè)數(shù)據(jù)表example05,將表中的stu_id設(shè)置為唯一約束,SQL語句如下:

CREATE TABLE example05(id INT PRIMARY KEY,
                       stu_id INT UNIQUE,
                       name VARCHAR(20) NOT NULL
                       );

上述SQL語句執(zhí)行后,example05表中包含id、stu_id和name三個(gè)字段。其中,id字段為主鍵,stu_id字段為唯一值,該字段的值不能重復(fù),name字段的值不能為空值。

4. 默認(rèn)約束

默認(rèn)約束用于給數(shù)據(jù)表中的字段指定默認(rèn)值,即當(dāng)在表中插入一條新記錄時(shí),如果沒有給這個(gè)字段賦值,那么,數(shù)據(jù)庫系統(tǒng)會(huì)自動(dòng)為這個(gè)字段插入默認(rèn)值。默認(rèn)值是通過DEFAULT關(guān)鍵字定義的,其基本的語法格式如下所示:

字段名 數(shù)據(jù)類型 DEFAULT 默認(rèn)值;

【案例】 創(chuàng)建一個(gè)數(shù)據(jù)表example06,將表中的grade字段的默認(rèn)值設(shè)置為0,SQL語句如下:

CREATE TABLE example06(id INT PRIMARY KEY AUTO_INCREMENT,
                       stu_id INT UNIQUE,
                       grade FLOAT DEFAULT 0
                      );

上述SQL語句執(zhí)行后,example06表中包含id、stu_id和grade三個(gè)字段。其中,id字段為主鍵,stu_id字段的值唯一,grade字段的默認(rèn)值為0。

5、外鍵約束(foreign key) FK

外鍵約束是用來加強(qiáng)兩個(gè)表(主表和從表)的一列或多列數(shù)據(jù)之間的連接的,可以保證一個(gè)或兩個(gè)表之間的參照完整性,外鍵是構(gòu)建于一個(gè)表的兩個(gè)字段或是兩個(gè)表的兩個(gè)字段之間的參照關(guān)系。

創(chuàng)建外鍵約束的順序是先定義主表的主鍵,然后定義從表的外鍵。也就是說只有主表的主鍵才能被從表用來作為外鍵使用,被約束的從表中的列可以不是主鍵,主表限制了從表更新和插入的操作。

6、自增約束(AUTO_INCREMENT)

自增約束(AUTO_INCREMENT)可以約束任何一個(gè)字段,該字段不一定是PRIMARY KEY字段,也就是說自增的字段并不等于主鍵字段。

但是PRIMARY_KEY約束的主鍵字段,一定是自增字段,即PRIMARY_KEY 要與AUTO_INCREMENT一起作用于同一個(gè)字段。

當(dāng)插入第一條記錄時(shí),自增字段沒有給定一個(gè)具體值,可以寫成DEFAULT/NULL,那么以后插入字段的時(shí)候,該自增字段就是從1開始,沒插入一條記錄,該自增字段的值增加1。當(dāng)插入第一條記錄時(shí),給自增字段一個(gè)具體值,那么以后插入的記錄在此自增字段上的值,就在第一條記錄該自增字段的值的基礎(chǔ)上每次增加1。

也可以在插入記錄的時(shí)候,不指定自增字段,而是指定其余字段進(jìn)行插入記錄的操作。



猜你喜歡:

猜你喜歡:

mysql索引如何使用?

MySQL和MariaDB有什么區(qū)別?

mysql5.5安裝教程:mysql下載與安裝

什么是mysql事務(wù)場景?

黑馬程序員Linux云計(jì)算+運(yùn)維開發(fā)培訓(xùn)課程

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