数据表的关联关系

本文详细介绍了MySQL数据库中数据之间的四种关联关系:一对一、一对多、多对一和多对多,以及如何通过外键约束来实现这些关联。在创建学生表和班级表的例子中,展示了如何在创建表时添加外键约束以及后期添加约束的方法。同时,讨论了级联删除和修改的实现,以及其在数据完整性方面的影响。
摘要由CSDN通过智能技术生成

关联关系:mysql是一个关系型数据库,不仅可以存储数据,还可以维护数据与数据之间的关系,通过在数据表中建立外键约束

数据之间的关联关系有四种:一对一关联,一对多,多对一,多对多

一对一关联

方案一,通过主键关联--两张数据表中主键相同的数据为相互对应的数据

方案二,唯一外键--在任意一张表中添加一个字段添加外键约束与另一张表主键关联,并且将外键列添加唯一约束

一对多与多对一

多对多关联 

方案:额外创建一张关系表来维护多对多关联---在关系表中定义两个外键,分别于两个胡数据表的主键进行关联

外键约束---将一个列添加外键约束,与另一张表的主键(唯一列)进行关联之后,外键约束的列添加的数据,必须要在主键关联的字段中

1,创建班级表

 create table class(
 id int primary key auto_increment,
 name varchar(30) not null unique,
 remark varchar(200)
 );

2,创建学生表(在学生表中添加外键与班级表的主键进行关联)

方案一

在创建表时,定义cid字段,并添加外键约束

由于cid列要与classes列表中的id进行关联,因此cid字段类型长度要与id一致

  create table students(
  num char(8) primary key,
  name varchar(30) not null,
  gender char(2) not null,
  age int not null,
 cid int,
 constraint FK_STUDENTS_CLASS foreign key(cid) references class(id)
 );

方案二:先创建表,再添加外键约束

create table students(
  num char(8) primary key,
  name varchar(30) not null,
  gender char(2) not null,
  age int not null,
 cid int);

在创建表之后,为cid添加外键约束

alter table students add constraint FK_STUDENTS_CLASS foreign key(cid) references class(id);

删除外键约束

alter table students drop foreign key FK_STUDENTS_CLASS;

3,向班级表添加信息

 当学生表中存在学生信息关联班级表的某条记录时,就不能对班级表的这条记录进行修改和删除操作

   

 如果一定要修改java3的班级ID,该如何实现?

1,将引用Java3班级id的学生的cid修改为null;

2,再修改班级信息表中javav3记录的id;

 

3,将学生表中cid设置为null的记录的cid重新修改为java3这个班级的新的id.

 级联删除

1,在创建外键时,设置级联修改和级联删除

删除原有的外键约束

 alter table students drop foreign key FK_STUDENTS_CLASS;

重新添加外键约束,并且设置级联修改和级联删除

mysql> alter table students add constraint FK_STUDENTS_CLASS foreign key(cid) references class(id) ON UPDATE CASCADE ON DELETE CASCADE;

2,测试级联修改

班级信息                                                   学生信息

    

 直接修改java3的id关联java3这个班级的学生记录的cid也会同步修改

  

3,测试级联删除

删除id=1的班级信息,学生表中引用此班级信息的记录也会被同步删除

delete from class where id = 1;

        

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值