Mysql外键作用和用法

个人理解,有误请指出。

语法

ALTER TABLE 子表 
ADD CONSTRAINT 外键名 
FOREIGN KEY (子表列) 
REFERENCES 主表名(主表列) 
ON DELETE + 约束
ON UPDATA + 约束 ;

注明:
外键名:自己设置,仅仅只是别名,这里有人会认为是关键字。
约束:在语法添加,约束名不同,作用不同,下面单独说。

约束

概念

navicat for mysql中设置外键
在这里插入图片描述
上面语法中在ON DELETE 和 ON UPDATA后面的+约束 ,下面是不同约束的功能

  • CASCADE:主表delete或update数据时,子表对应的数据也会被删除或更新。
  • SET NULL:主表delete或update数据时,子表的对应数据会被变为null。
  • RESTRICT:如果主表想要delete、update数据,但是子表的外键列中有对应的数据,那么主表中的数据不可以被删除。
    通俗的说:子表有数据,主表无法更改。
  • NO ACTION:和RESTRICT作用差不多,现在mysql最新版本已经无法选择了。

示例

删除和更新的约束作用一样,这里只演示删除。
主表:eastchina
在这里插入图片描述
子表:city
在这里插入图片描述

设置为RESTRICT

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果:无法删除。

设置为CASCADE

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果:主表数据删除,子表也会被删除。

设置为SET NULL

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
结果:主表删除数据,子表外键列变为null。

注意事项

创建外键

1.子表并非只能设置在主表的主键上,但是必须是唯一性索引。通常都设置在主键。
2.子表外键列的字段类型需要和主表的主键保持一致性。
3.如果约束需要设置为SET NULL 时,那么子表的外键列不可以设置为not null
4.外键必须使用相同的存储引擎,mysql的默认存储引擎是innodb,所以可以不用管它。
5.主表的主键如果是无符号或者自动递,那么外键就不会增加成功。

删除外键

注意:外键不支持修改,只能删了重建

删除:ALTER  TABLE  外键表名  DROP  FOREIGN  KEY  外键名
  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值