mysql外键


今天上午用了一个多小时大概了解了mysql的外键的内容,这里附上学习上东西和各位大佬,初入门sql,难免很多错误,请大佬们嘴下留情。

一,相关概念

什么是外键

a表中的某字段是b表的主键,则可以a表的该字段设置成
b表的外键。

外键的作用

主要作用是保证数据的统一性(就是当一张表的该字段改变时候,另外的一张表也做相应的改变或者是禁止做相应的改变,具体如何改变见三,外键的四种模式)

主表与从表

因为外键的存在涉及了两张表,我们称含有设置了外键的表格成为从表,外键所指向的表叫做主表。

二,外键的创建的两种方法

sql语句创建

又分为三种方式,
1,若从表没有存在
例子:创建一个孩子家长表(c_p)并把c_id设置为指向children的外键,p_id 设置为指向parents的外键。
create table c_p(
c_id int not null,
p_id int not null,
foreign key(c_id) references children(id);
foreign key(p_id) references parents(id);
)
2,若从表已经存在,把某字段设置成外键
ALTER TABLE c_p ADD CONSTRAINT fk_cid FOREIGN KEY(c_id) REFERENCES children(id)

3,若表存在但是需要新建一个字段设置成外键则分两步实现,
先新加一个字段
alter table c_p add column c_id int not null;然后再利用第二步操作。

补充:可能有一步到位的方法,不想再看了,哈哈哈哈。

navicat创建

1 选中需要设置的表,
在这里插入图片描述2 鼠标右键选择设计表格
在这里插入图片描述
3 点击外键
在这里插入图片描述4 填写相关的数据,
名:我也不知道有啥用,哈哈哈,可以不填,自动生成
栏位:可以选择从表中的字段,设置该字段为外键
参考数据库:主表所在数据库
参考表:外键指向的主表
参考栏位:主表中对应与1外键的字段
删除时:
更新时:
作用见三,外键四种模式

三,外键的四种模式

restrict

1 若主表中删除(更新)一行数据,如果该行数据的与外键对应的字段取值在外键中存在,则会报错,禁止删除(更新)。
例子:对children表删除id为2的行

children和c_p表如下,children 中 有id=2 的一行1,c_p中有对应的c_id=2的一行。

在这里插入图片描述在这里插入图片描述执行删除children中id= 2这一行的操作
在这里插入图片描述执行失败

2 r如果从表中插入或者修改一行数据,若外键属性取值不在主表中存在,则会报错

cascaes

1 若主表中删除(更新)一行数据,如果该行数据的与外键对应的字段取值在外键中存在,则会对从表做相应的操作(同时删除更行)。

2 如果从表中插入一行数据,若外键属性取值不在主表中存在,则会报错
ru如果从表中修改一行数据,

set null

1 若主表中删除(更新)一行数据,如果该行数据的与外键对应的字段取值在外键中存在,则会对从表做相应的操作(设置为null)。若从表该字段不能为空,则效果和no action一样。

2

no action

1 若主表中删除(更新)一行数据,如果该行数据的与外键对应的字段取值在外键中存在,则会对从表不做改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值