mysql中外键的定义、作用、添加和删除

本文介绍了MySQL中外键的概念,强调其在确保数据完整性中的作用。通过一个学生档案与成绩单的例子,说明外键如何建立两个表之间的关联。接着详细讲述了如何创建和验证外键,以及在主表数据变动时,通过ON DELETE和ON UPDATE子句管理从表数据,以保持数据库的整洁。最后讨论了如何删除外键约束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:简介
在实际开发的项目中,一个健壮数据库中的数据一定有很好的参照完整性。例如学生档案和成绩单两张表,如果成绩单中有张三的成绩,学生档案中张三的档案却被删除了,这样就会产生垃圾数据或者错误数据。为了保证数据的完整性,将两张表之间的数据建立关系,因此就需要在成绩表中添加外键约束。

2:外键的定义
外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束。外键用来建立和加强两个表数据之间的连接。

3:材料准备

班级表:
	create table grade(
    -> id int(4) not null primary key,
    -> name varchar(36)
    -> );
学生表:    
    create table student (
    -> sid int(4) not null primary key,
    -> sname varchar(36),
    -> gid int(4) not null
    -> );

首先建立两张表,student、grade,学生表中的gid是学生所在的班级id,是引入了班级表grade中的主键id,那么gid就可以作为表student表的外键。被引用的表grade是主表,引用外键的表student是从表。两个表是主从关系。表student用gid可以连接表grade中的信息,从而建立了两个表中的连接。可以这么理解,外键即依赖关系,可以明确的声明表和表之间的关系额字段的参照关系,这种就叫做表和表之间声明了一个外键。
注意:引入外键之后,外键列只能插入参照列存在的值,参照列被参照的值不能被删除,这就保证了数据的参照完整性。

4:添加外键

语法格式:
alert table 表名 add constraint FK_ID foreign key(外键字段名) references 外表表名(主键字段名)
其中FK_ID为外键的名称,是随意的。
为表student添加外键约束,具体语句如下:
mysql> alter table student add constraint FK_ID foreign key gid references grade id;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'references grade id' at line 1
mysql> alter table student add constraint FK_ID foreign key (gid) references grade (id);
Query OK, 0 rows affected (1.27 sec)

5:验证外键的作用:

mysql> insert into student (sid, sname, gid) values(1000, 'wusong', 123);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`student`, CONSTRAINT `FK_ID` FOREIGN KEY (`gid`) REFERENCES `grade` (`id`))
上述错误表示,若要向student中插入学生数据,则必须插入已经在grade中存在的gid值,实际意义就是要把新来的学生放入某个班级,则班级必须先存在。

6:外键关联表联合删除
建立外键是为了保证数据的完整和统一性,但如果主表中的数据被删除或修改,从表中的数据该怎么办?很明显应该删除,否则数据库中会存在很多无意义的垃圾数据。为此,MySQL可以在建立外键时添加ON DELETE或ON UPDATE子句来告诉数据库,怎样避免垃圾数据的产生。

alter table 表名 add constraint FK_ID foreign key (外键字段名) references 外表表名 (主键字段名)
[on delete {cascade | set null | no action| restrict}]
[on update {cascade | set null | no action| restrict}]
其中restrict是默认操作,表示拒绝主表删除或修改外键关联列,这是最安全的设置。
而cascade表示删除包含与已删除键值有参考关系的所有记录。

7:删除外键约束

在实际开发中,根据业务逻辑的需求,需要解除两个表之间的关联关系时,就需要删除外键约束。删除外键约束的语法如下:
alter table 表名 drop foreign key 外键名;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值