日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL—表的完整性约束(外键约束)(一)

發布時間:2025/3/21 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL—表的完整性约束(外键约束)(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、什么是完整性約束?
為防止不符合規范的數據存入數據庫,在用戶對數據進行插入、修改、刪除等操作時,MySQL提供了一種機制來檢查數據庫中的數據是否滿足規定的條件,以保證數據庫中數據的準確性和一致性,這種機制就是完整性約束。
2、什么是外鍵約束?
外鍵約束(FOREIGN KEY,縮寫FK)是用來實現數據庫表的參照完整性的。外鍵約束可以使兩張表緊密的結合起來,特別是針對修改或者刪除的級聯操作時,會保證數據的完整性。
3、什么是外鍵?
外鍵是指表中某個字段的值依賴于另一張表中某個字段的值,而被依賴的字段必須具有主鍵約束或者唯一約束
4、什么是父表?
被依賴的表我們通常稱之為父表或者主表
5、什么是子表?
設置外鍵約束的表稱為子表或者從表

例如:
舉個例子:如果想要表示學生和班級的關系,首先要有學生表和班級表兩張表,然后學生表中有個字段為stu_clazz(該字段表示學生所在的班級),而該字段的取值范圍由班級表中的主鍵cla_no字段(該字段表示班級編號)的取值決定。那么班級表為主表,學生表為從表,且stu_clazz字段是學生表的外鍵。通過stu_clazz字段就建立了學生表和班級表的關系。

主表(父表):班級表 - 班級編號 - 主鍵
從表(子表):學生表 - 班級編號 - 外鍵

錯誤案例

6、先創建父表:班級表

create table t_class(cno int(4) primary key auto_increment,cname varchar(5) not null,room char(4)-- 插入數據 insert into t_class values(null,'c1','1001'),(null,'c2','1002'),(null,'c3','1003');

7、創建子表:學生表

create table t_student(sno int(6) primary key auto_increment,sname varchar(5) not null,classno int(4) ) -- 插入數據 insert into t_student values (null,'張三',1),(null,'李四',1),(null,'王五',2);

需求1:
添加一個學生對應的班級編號為4

insert into t_student values(null,'curry',3);

運行結果:添加成功

需求1出現問題:因為你現在的外鍵約束,沒用語法添加進去,現在只是邏輯上認為班級編號是外鍵,沒有從語法上定義
解決辦法:添加外鍵約束
注意:外鍵約束只有表級約束,沒有列級約束:

正確案例

先創建父表;班級表

create table t_class(cno int(4) primary key auto_increment,cname varchar(5) not null,room char(4))

創建子表,學生表(創建表中添加外鍵約束)

create table t_student(sno int(6) primary key auto_increment,sname varchar(5) not null,classno int(4),constraint fk_stu_classno foreign key (classno) references t_class (cno) )

或者創建子表,學生表(在創建表以后添加外鍵約束)

create table t_student(sno int(6) primary key auto_increment, sname varchar(5) not null, classno int(4) ); -- 在創建表以后添加外鍵約束: alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno)

刪除表的時候,先刪除主表,再刪除從表
需求1:添加一個學生對應的班級編號為4

insert into t_student values(null,'curry',4);

報錯信息:1452 - Cannot add or update a child row: a foreign key constraint fails (mytestdb.t_student, CONSTRAINT fk_stu_classno FOREIGN KEY (classno) REFERENCES t_class (cno))

需求2:刪除學生表中學號為3的學生,可以刪除成功,能刪除成功的原因是子表中不存在該數據

delete from t_student where sno=3;

需求3:刪除班級表中班級編號為3的信息

delete from t_class where cno=1;

報錯信息:1451 - Cannot delete or update a parent row: a foreign key constraint fails (mytestdb.t_student, CONSTRAINT fk_stu_classno FOREIGN KEY (classno) REFERENCES t_class (cno))

總結

以上是生活随笔為你收集整理的MySQL—表的完整性约束(外键约束)(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。