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
運行結果:添加成功
需求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
報錯信息: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—表的完整性约束(外键约束)(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL—表中添加数据
- 下一篇: MySQL—数据库表的完整性约束(非外键