MySQL數據庫表約束講解
MySQL數據庫表約束
為了防止往數據表中插入錯誤的數據,在MySQL中,定義了一些維護數據庫完整性的規(guī)則,即表的約束。
常見的表的約束:

上表中列舉的約束條件都是針對表中字段進行限制, 從而保證數據表中數據的正確性和唯一性。
一、主鍵約束
在MySQL中,為了快速查找表中的某條信息,可以通過設置主鍵來實現(xiàn)。主鍵約束是通過PRIMARY KEY定義的,它可以唯一標識表中的記錄,這就好比身份證可以用來標識人的身份一樣。
在MySQL中,主鍵約束分兩種,具體如下:
1、單字段主鍵
單字段主鍵指的是由一個字段構成的主鍵,其基本語法如下:

上述案例中,表student創(chuàng)建了id、name和grade三個字段,其中id字段是主鍵。
2、多字段主鍵
多字段主鍵指的是多個字段組合而成的主鍵,其基本的語法格式如下所示:

上述案例中,表student創(chuàng)建了id、name和grade三個字段,其中id和name兩個字段組合可以唯一確定一條記錄。
【補充】一個表最多可以創(chuàng)建一個主鍵。
二、外鍵約束
如果表A的主鍵是表B中的字段,則該字段稱為表B的外鍵;另外表A稱為主表,表B稱為從表。外鍵是用來
實現(xiàn)參照完整性的,不同的外鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或刪除的級聯(lián)操作將使
得日常維護更輕松。外鍵主要用來保證數據的完整性和一致性。其基本語法如下:

【補充】一個表允許有多個外鍵,且外鍵只適用于InnoDB表,MyISAM表不支持外鍵。
InnoDB表和MyISAM表的主要區(qū)別是:InnoDB表支持事務、行鎖和外鍵,MyISAM不支持;InnoDB表索引式修改效率較MyISAM高,MyISAM表查詢、插入和刪除效率較InnoDB高,而且MyISAM索引和數據分離,索引壓縮存儲,而InnoDB索引和數據緊密結合,不支持壓縮,所以MyISAM內存利用率比InnoDB高;另外MyISAM的移植性也更強。
三、非空約束
非空約束指的是字段的值不能為NULL,在MySQL中,非空約束是通過NOT NULL定義的,其基本語法
如下:

上述案例中,表student包含id、name和grade三個字段。其中id為主鍵,name為非空字段。
【補充】一個表可以有多個非空約束字段。
四、唯一約束
唯一約束用于保存數據表中字段的唯一性,類似于主鍵,即表中字段值不能重復出現(xiàn)。
唯一約束是通過UNIQUE定義的,其基本語法如下:

上述案例中,表student包含id、name和grade三個字段。其中id為主鍵,name字段為唯一值,不能重復。
【補充】一個表可以有多個唯一約束字段。
五、默認約束
默認約束用于給數據表中的字段指定默認值,即當在表中插入一條新紀錄時,如果沒有給這個字段賦值,那么,數據庫系統(tǒng)會自動為這個字段插入默認值。
默認值是通過DEFAULT關鍵字定義的,其基本語法如下:

上述案例中,表student包含id、name和grade三個字段。其中id為主鍵,grade字段的默認值為0。
【補充】一個表可以有多個默認約束字段。
六、自增約束
在數據表中,若想為表中插入新記錄自動生成唯一的ID,可以使用AUTO_INCREMENT約束來實現(xiàn)。
AUTO_INCREMENT約束的字段可以是任何整數類型。默認情況下,改字段的值是從1開始自增的。
其基本語法如下:

上述案例中,表student包含id、name和grade三個字段。其中id為主鍵,且沒插入一條新紀錄,id都會自動增加。
【補充】一個表只能設置一個自增約束字段。
數據庫建表的約束條件
常用約束條件及簡單介紹
primary key (PK) ? ? ?#標識該字段為該表的主鍵,可以唯一的標識記錄,主鍵就是不為空?? ?且唯一當然其還有加速查詢的作用 foreign key (FK) ? ? ?#標識該字段為該表的外鍵,用來建立表與表的關聯(lián)關系 not null ? ? ? ? ? ? ?#標識該字段不能為空 unique key (UK) ? ? ? #標識該字段的值是唯一的 auto_increment ? ? ? ?#標識該字段的值自動增長(整數類型,而且為主鍵) default ? ? ? ? ? ? ? #為該字段設置默認值 unsigned ? ? ? ? ? ? ?#將整型設置為無符號即正數 zerofill ? ? ? ? ? ? ?#不夠使用0進行填充
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

