更新時(shí)間:2021-05-26 來源:黑馬程序員 瀏覽量:
為了防止數(shù)據(jù)表中插入錯(cuò)誤的數(shù)據(jù),在MySQL中,定義了一些維護(hù)數(shù)據(jù)庫完整性的規(guī)則,即表的約束。下表列舉了常見的表的約束。
在MySQL中,為了快速查找表中的某條信息,可以通過設(shè)置主鍵來實(shí)現(xiàn)。主鍵約束是通過PRIMARY KEY定義的,它可以唯一標(biāo)識表中的記錄,這就好比身份證可以用來標(biāo)識人的身份一樣。在MySQL中,主鍵約束分為兩種,具體如下。
單字段主鍵指的是由一個(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字段是主鍵。
多字段主鍵指的是多個(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值。
非空約束指的是字段的值不能為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è)非空字段。
唯一約束用于保證數(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字段的值不能為空值。
默認(rèn)約束用于給數(shù)據(jù)表中的字段指定默認(rèn)值,即當(dāng)在表中插入一條新記錄時(shí),如果沒有給這個(gè)字段賦值,那么,數(shù)據(jù)庫系統(tǒ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。
外鍵約束是用來加強(qiáng)兩個(gè)表(主表和從表)的一列或多列數(shù)據(jù)之間的連接的,可以保證一個(gè)或兩個(gè)表之間的參照完整性,外鍵是構(gòu)建于一個(gè)表的兩個(gè)字段或是兩個(gè)表的兩個(gè)字段之間的參照關(guān)系。
創(chuàng)建外鍵約束的順序是先定義主表的主鍵,然后定義從表的外鍵。也就是說只有主表的主鍵才能被從表用來作為外鍵使用,被約束的從表中的列可以不是主鍵,主表限制了從表更新和插入的操作。
自增約束(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)行插入記錄的操作。
猜你喜歡:
猜你喜歡: