MySQL六種約束的示例詳解
目錄
- 什么是約束
- 外鍵約束
什么是約束
作用于表上的規(guī)則,限制存儲(chǔ)在表中的數(shù)據(jù)
約束分類:
創(chuàng)建表示例:
CREATE TABLE info( `id` INT UNIQUE auto_increment PRIMARY KEY COMMENT"ID唯一標(biāo)識(shí)", `name` VARCHAR(10) NOT NULL UNIQUE COMMENT"姓名", `age` INT CHECK(age > 0 && age < 120) COMMENT "年齡", `status` CHAR(1) DEFAULT"1" COMMENT"狀態(tài)", `gender` CHAR(1) COMMENT"性別" )COMMENT "用戶信息表";
外鍵約束
外鍵通常用來為兩張表建立連接,兩張利用外鍵連接的表被稱為父子表。
子表當(dāng)中會(huì)設(shè)定一個(gè)外鍵字段用于關(guān)聯(lián)父表的主鍵字段
即擁有外鍵的表是子表(從表),該外鍵對(duì)應(yīng)另一個(gè)表的主鍵這個(gè)表稱之為父表
如果沒有設(shè)置外鍵,僅僅是將子表開了一個(gè)字段對(duì)應(yīng)上了父表的主鍵字段在mysql層面是依舊沒有任何關(guān)系的。此時(shí)兩個(gè)表僅存在邏輯關(guān)系,無法保證數(shù)據(jù)的完整性和一致性
創(chuàng)建外鍵語法:
-- 在創(chuàng)建表時(shí)創(chuàng)建 CREATE TABLE son( ... CONSTRAINT [外鍵名稱] FOREIGN KEY(外鍵字段名) REFERENCES 主表名(主表主鍵字段名) ); -- 創(chuàng)建表后為表添加主鍵 ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY(外鍵字段名) REFERENCES 主表(主表主鍵字段名) -- 刪除外鍵 alter table 表名 drop foreign key 外鍵名稱;
創(chuàng)建示例:
# 父表 CREATE TABLE father( `id` INT auto_increment PRIMARY KEY COMMENT"父表ID", `name` VARCHAR(20) NOT NULL COMMENT"姓名", `password` VARCHAR(20) DEFAULT(0000) ); INSERT INTO father VALUES(null,"小三","1234"),(null,"小四","1234"),(null,"小五","1234"),(null,"小六","1234"); # 子表 CREATE TABLE son( `id` INT auto_increment PRIMARY KEY COMMENT"子表ID", `status` varchar(10) COMMENT "狀態(tài)", `fa_id` INT COMMENT"外鍵", CONSTRAINT fk_father_son FOREIGN KEY(fa_id) REFERENCES father(id) ); INSERT INTO son VALUES(null,"活",2),(null,"活",3),(null,"死",3),(null,"活",2);
上述示例 子表設(shè)置了外鍵,字段名為fa_id并關(guān)聯(lián)到了父表主鍵id,外鍵名稱為fk_father_son
創(chuàng)建完成后,我們添加幾組數(shù)據(jù)。將幾個(gè)son添加到表中,并設(shè)置外鍵字段屬性為某個(gè)father。比如(null,‘活’,3),那么此時(shí)如果我們嘗試去刪除父表id=3的這一行數(shù)據(jù),就會(huì)提示錯(cuò)誤。因?yàn)閮蓚€(gè)表已經(jīng)在mysql層面上進(jìn)行了關(guān)聯(lián)
總結(jié):
- 從表的外鍵通常是主表的主鍵
- 從表中外鍵的類型必須與主表中的主鍵類型一致
- 主表數(shù)據(jù)發(fā)生變化時(shí)應(yīng)注意從表數(shù)據(jù)的一致性問題
到此這篇關(guān)于MySQL六種約束的示例詳解的文章就介紹到這了,更多相關(guān)MySQL六種約束內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!
相關(guān)文章:
