mysql外键和外键约束

一. 基本知识

1.MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引
2. 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。外键主要用来保证数据的完整性和一致性

二. 外键约束

1.外键四种操作
(1) CASCADE:从父表删除或更新会自动删除或更新子表中匹配的行
(2) SET NULL:从父表删除或更新行,会设置子表中的外键列为NULL,但必须保证子表列没有指定NOT NULL
(3) RESTRICT:拒绝对父表的删除或更新操作(如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作,从mysql4.0.8开始支持)
(4) NO ACTION:跟RESTRICT一样,先检查外键

2.使用时的情况
(1)父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败;
(2)父表更新时子表也更新,父表删除时子表匹配的项也删除

三. mysql指令

(1)添加主键
alter table 表名 add primary key (段名)
自增约束的关键字:auto_increment
alter table 表名 modify 主键名 int auto_increment;
(2)添加外键约束
alter table 表名 add constraint 外键名 foreign key(段名) references 被引用表名 (被引用段名)
(3)删除主键
alter table 表名 drop primary key
(3)删除外键约束
alter table 表名 drop foreign key 外键名
在命令后添加 ON DELETE 操作名 UPDATE 操作名
例:ON DELETE RESTRICT ON UPDATE RESTRICT

四. 操作

(1)级联关系(cascade)
先看一下我们用于操作的表
在这里插入图片描述
两个表一个test1,一个test2,我们让test1 父表,级联即是当我们删除id=1的时候test2中的zid=1的数据也会被删除
在这里插入图片描述
首先添加外键,然后看一下表中数据,然后开始删除test1中的 id=1(记得设置级联关系)
在这里插入图片描述
我们能看到当我们删除id=1是,test2中zid=1也被删除了,当我们删除test2中zid=2时候,仅仅删除了test2中的数据,test1中没变

(2)置空(set null)
在这里插入图片描述

这次让num当 外键,当我们删除id=1时候,test1中数据被删除,但是test2中数值为null
在这里插入图片描述
注意: 不可以设置not null,否则数值不会变成null的

(3) 限制 (restrict)
在这里插入图片描述
当我使用删除操作时候不可以删除,因为test2中有zid=1,但是test2中没有zid=2,试一下删除id=2
在这里插入图片描述
ok了,因为test2中没有zid=2,所以没有限制,可以删除id=2
(4) NO ACTION:跟RESTRICT一样,先检查外键
没什么说的,简单看一下图吧,和RESTRICT图片一样
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值