首頁 > 軟體

MySQL資料庫表約束講解

2022-06-20 22:03:38

MySQL資料庫表約束

為了防止往資料表中插入錯誤的資料,在MySQL中,定義了一些維護資料庫完整性的規則,即表的約束。

常見的表的約束:

上表中列舉的約束條件都是針對表中欄位進行限制, 從而保證資料表中資料的正確性和唯一性。

一、主鍵約束

在MySQL中,為了快速查詢表中的某條資訊,可以通過設定主鍵來實現。主鍵約束是通過PRIMARY KEY定義的,它可以唯一標識表中的記錄,這就好比身份證可以用來標識人的身份一樣。

在MySQL中,主鍵約束分兩種,具體如下:

1、單欄位主鍵

單欄位主鍵指的是由一個欄位構成的主鍵,其基本語法如下:

上述案例中,表student建立了id、name和grade三個欄位,其中id欄位是主鍵。

2、多欄位主鍵

多欄位主鍵指的是多個欄位組合而成的主鍵,其基本的語法格式如下所示:

上述案例中,表student建立了id、name和grade三個欄位,其中id和name兩個欄位組合可以唯一確定一條記錄。

【補充】一個表最多可以建立一個主鍵。

二、外來鍵約束

如果表A的主鍵是表B中的欄位,則該欄位稱為表B的外來鍵;另外表A稱為主表,表B稱為從表。外來鍵是用來

實現參照完整性的,不同的外來鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或刪除的級聯操作將使

得日常維護更輕鬆。外來鍵主要用來保證資料的完整性和一致性。其基本語法如下:

【補充】一個表允許有多個外來鍵,且外來鍵只適用於InnoDB表,MyISAM表不支援外來鍵。

InnoDB表和MyISAM表的主要區別是:InnoDB表支援事務、行鎖和外來鍵,MyISAM不支援;InnoDB表索引式修改效率較MyISAM高,MyISAM表查詢、插入和刪除效率較InnoDB高,而且MyISAM索引和資料分離,索引壓縮儲存,而InnoDB索引和資料緊密結合,不支援壓縮,所以MyISAM記憶體利用率比InnoDB高;另外MyISAM的移植性也更強。

三、非空約束

非空約束指的是欄位的值不能為NULL,在MySQL中,非空約束是通過NOT NULL定義的,其基本語法

如下:

上述案例中,表student包含id、name和grade三個欄位。其中id為主鍵,name為非空欄位。

【補充】一個表可以有多個非空約束欄位。

四、唯一約束

唯一約束用於儲存資料表中欄位的唯一性,類似於主鍵,即表中欄位值不能重複出現。

唯一約束是通過UNIQUE定義的,其基本語法如下:

上述案例中,表student包含id、name和grade三個欄位。其中id為主鍵,name欄位為唯一值,不能重複。

【補充】一個表可以有多個唯一約束欄位。

五、預設約束

預設約束用於給資料表中的欄位指定預設值,即當在表中插入一條新紀錄時,如果沒有給這個欄位賦值,那麼,資料庫系統會自動為這個欄位插入預設值。

預設值是通過DEFAULT關鍵字定義的,其基本語法如下:

上述案例中,表student包含id、name和grade三個欄位。其中id為主鍵,grade欄位的預設值為0。

【補充】一個表可以有多個預設約束欄位。

六、自增約束

在資料表中,若想為表中插入新記錄自動生成唯一的ID,可以使用AUTO_INCREMENT約束來實現。

AUTO_INCREMENT約束的欄位可以是任何整數型別。預設情況下,改欄位的值是從1開始自增的。

其基本語法如下:

上述案例中,表student包含id、name和grade三個欄位。其中id為主鍵,且沒插入一條新紀錄,id都會自動增加。

【補充】一個表只能設定一個自增約束欄位。

資料庫建表的約束條件

常用約束條件及簡單介紹

primary key (PK)      #標識該欄位為該表的主鍵,可以唯一的標識記錄,主鍵就是不為空    且唯一當然其還有加速查詢的作用
foreign key (FK)      #標識該欄位為該表的外來鍵,用來建立表與表的關聯關係
not null              #標識該欄位不能為空
unique key (UK)       #標識該欄位的值是唯一的
auto_increment        #標識該欄位的值自動增長(整數型別,而且為主鍵)
default               #為該欄位設定預設值
unsigned              #將整型設定為無符號即正數
zerofill              #不夠使用0進行填充

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。           


IT145.com E-mail:sddin#qq.com