工業(yè)設(shè)計(jì)公司深圳本也設(shè)計(jì)seo優(yōu)化服務(wù)
個(gè)人主頁:兜里有顆棉花糖
歡迎 點(diǎn)贊👍 收藏? 留言? 加關(guān)注💓本文由 兜里有顆棉花糖 原創(chuàng)
收錄于專欄【MySQL學(xué)習(xí)專欄】🎈
本專欄旨在分享學(xué)習(xí)MySQL的一點(diǎn)學(xué)習(xí)心得,歡迎大家在評(píng)論區(qū)討論💌
目錄
- 一、什么是約束
- 二、樣例演示
- 三、外鍵約束的演示
- 添加外鍵
- 刪除外鍵
- 四、外鍵刪除更新行為
一、什么是約束
概念:約束用來作用在表中字段上的規(guī)則,用于限制存儲(chǔ)在表中的數(shù)據(jù)。
目的:保證數(shù)據(jù)庫中數(shù)據(jù)的正確性、有效性、完整性。
以下是數(shù)據(jù)庫中的六種約束:非空約束、唯一約束、主鍵約束、默認(rèn)約束、檢查約束、外鍵約束。
注意事項(xiàng):
- 多個(gè)約束之間應(yīng)該用空格進(jìn)行分割。
主鍵約束:在插入數(shù)據(jù)時(shí),主鍵約束不需要顯式的指定,如果沒有為主鍵列指定具體的值,MySQL 會(huì)自動(dòng)生成一個(gè)唯一的主鍵值。這是因?yàn)橹麈I約束要求每個(gè)記錄都有一個(gè)唯一標(biāo)識(shí)。
二、樣例演示
我們根據(jù)上表的需求來進(jìn)行表結(jié)構(gòu)的創(chuàng)建演示。
創(chuàng)建語句:
create table user_1(id int primary key auto_increment comment '主鍵',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 '用戶表2';
運(yùn)行結(jié)果:
三、外鍵約束的演示
什么是外鍵約束:外鍵約束是關(guān)系型數(shù)據(jù)庫中的一種約束,用于確保數(shù)據(jù)完整性和一致性。它定義了一個(gè)表中的字段與另一個(gè)表中的字段之間的關(guān)系。外鍵約束的作用是保持?jǐn)?shù)據(jù)的一致性,防止出現(xiàn)不符合業(yè)務(wù)邏輯的數(shù)據(jù)關(guān)聯(lián)。
外鍵約束可以分為兩個(gè)角色:主表和從表。主表中的字段稱為主鍵,而從表中的字段稱為外鍵。外鍵字段在從表中建立了與主表中主鍵的關(guān)聯(lián)關(guān)系,它引用了主表中的某個(gè)字段
,確保從表中的數(shù)據(jù)與主表中的數(shù)據(jù)始終保持一致。
下面來演示以下外鍵約束,首先有兩張表,一張表是主表(部門表),另外一張表就是從表(員工表)。請(qǐng)看下圖:
如果我們沒有為上述表創(chuàng)建外鍵約束的話,那么在數(shù)據(jù)庫層面的話,上述表是沒有任何聯(lián)系的,此時(shí)就無法保持?jǐn)?shù)據(jù)的一致性。
下面是主表和從表的創(chuàng)建和與數(shù)據(jù)的插入:
-- 父表的創(chuàng)建
create table dept(id int auto_increment primary key comment 'ID' ,name varchar(10) not null comment '部門名稱'
) comment '部門表';-- 子表的創(chuàng)建
create table emp(id int auto_increment primary key,name varchar(10) not null comment '姓名',age int comment '年齡',job varchar(10) comment '工作',salary int comment '薪資',entrydate date comment '入職時(shí)間',managerid int comment 'BossID',dept_id int comment '部門ID'
) comment '員工表';-- 主表數(shù)據(jù)插入
insert into dept(id,name) values(1,'研發(fā)部'),(2,'市場(chǎng)部'),(3,'財(cái)務(wù)部'),(4,'銷售部'),(5,'總經(jīng)辦');-- 子表數(shù)據(jù)插入
insert into emp(id,name,age,job,salary,entrydate,managerid,dept_id) values(1,'Daming',18,'總經(jīng)理',30000,'2010-9-12',null,5),(2,'Amy',19,'項(xiàng)目經(jīng)理',15000,'2009-8-21',1,1),(3,'Simon',20,'后端開發(fā)',13000,'2008-8-7',2,1),(4,'David',21,'后端架構(gòu)師',17000,'2007-7-9',2,1),(5,'Tom',23,'全棧',18000,'2004-8-6',3,1),(6,'Bob',18,'移動(dòng)開發(fā)工程師',15000,'2001-7-30',2,1);
主表和從表演示:
員工表中的dept_id
關(guān)聯(lián)的是部門表的id
。
添加外鍵
有了主表和從表后,我們開始添加外鍵來使這兩個(gè)表產(chǎn)生關(guān)聯(lián)。
添加外鍵:
CREATE TABLE 表名(字段名 數(shù)據(jù)類型,...[CONSTRAINT] [外鍵名稱] FOREIGN KEY(外鍵字段名) REFERENCES 主表(主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名) REFERENCES 主表(主表列名);
現(xiàn)在我們來執(zhí)行下面添加外鍵的語句:alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);
執(zhí)行完成之后,請(qǐng)看emp表的演示結(jié)果:
刪除外鍵
刪除外鍵語法:
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;
現(xiàn)在我們來刪除剛剛emp表中添加的外鍵fk_emp_dept_id
。
執(zhí)行命令:alter table emp drop foreign key fk_emp_dept_id
。
演示結(jié)果如下(可以看到剛剛的藍(lán)色小鑰匙消失不見了,說明我們成功刪除了emp表中的外鍵)。
四、外鍵刪除更新行為
下表是外鍵約束的刪除和更新行為,請(qǐng)看:
格式:
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
外鍵刪除和更新行為的舉例:
// cascade
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update cascade on delete cascade;//set null
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update set null on delete cascade;
好了,以上就是本文的全部?jī)?nèi)容,主要對(duì)MySQL中的約束進(jìn)行了講解。
就到這里吧,再見啦友友們!!!