MySql外键

外键

MySql外键必须使用存储引擎为innodb
因程序很难100%保证数据的完整性,而外键在数据库服务器当机或者出现其他的问题时,能够最大限度的保证数据的一致性和完整性。
设置外键约束的两个表之间会具有父子关系,即子表中外键的字段的取值范围由父表所决定
设置外键一定程度上降低数据库的速度
子表的外键字段的数据类型和父表要一致
一个健壮数据库中的数据一定有很好的参照完整性。例如,学生表和成绩单两张表,如果成绩单中有张三的成绩,学生表中张三的档案被删除了,这样就会产生垃圾数据或错误数据。为了保证数据的完整性,将两张表之间的数据建立关系,因此就绪在表中添加外键约束。

成绩表表

create table grades(
id int(4) not null primary key,
gid decimal(4,1)
);
学生表

create table student(
sid int(4) not null primary key auto_increment,
sname varchar(36),
cid int(4) not null
);
往里面加点数据

–加入学生信息iron man,cid为1
insert into student values(0,‘iron man’,1);

–向grades 表中加入分数120.0
insert into grades (id,grade) values (1,120);
添加外键

–alter table 表名 add constraint 外键名字 foreign key(外键字段名) references 外表表名(主键字段名)
alter table student add constraint fk_cid foreign key(cid) references grades(id);
这时候如果我再向student表中插入id,比如2,该id不存在于grades中,就会插入失败。同时,如果将grades表中id=1修改为id=2或者其他,也会失败。

insert into student values(0,‘shell’,2);
删除外键

–alter table 表名 drop foreign key 外键名;
alter table student drop foreign key fk_cid;
总结

一个表可以有多个外键
对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败
对父表的作用:对父表的主键字段进行删或改时,如果对应的主键在字表中被应用,操作会失败。
外键的定制作用----三种约束模式:

district:严格模式(默认), 父表不能删除或更新一个被子表引用的记录。

cascade:级联模式, 父表操作后,子表关联的数据也跟着一起操作。

set null:置空模式,前提外键字段允许为NLL, 父表操作后,子表对应的字段被置空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值