[MySQL & Python] 08.表关系与外键约束

表和表的关系

单表

一对多

多对多

 

一对多示例

外键约束: 保证一个列的值必须是其他表中特定列已经存在的值。例如: info.depart_id 的值必须是depart.id中已经存在的值。

新创建表的时候,使用: constraint 外键名称 foreign key 本表名(字段) reference 外表名(字段名)


depart 表:
create table depart (
id int not null primary key auto_increment,
title varchar(16) not null) default charset=utf8;

info表:
create table info (    
id int not null primary key auto_increment,    
name varchar(20) not null,    
email varchar(40) not null,    
age int not null,
depart_id int,    
 constraint fk_info_depart foreign key (depart_id) references depart(id)
) default charset=utf8;

-- info表中添加了外键约束,从info的depart_id关联到depart的id字段。

 

对于已经创建好的表,添加外键约束,使用:

alter table 表名 add constraint 外键名称 foreign key 本表(列名) references 外表(列名)

mysql> alter table info  add constraint fk_info_depart foreign key info(depart_i
d) references depart(id);

 

多对多

两个单表+关系表

两张单表的值通过关联表进行关联

比如: 表一(学生表),表二(课程表), 关联表(学生选课表)

通过关联表,学生和课程形成多对多的关系, 一个学生可以选择多个课程,一个课程可以有多个学生。

关联表需要创建两个外键,分别关联到学生的id与课程的id。

--学生表
create table students (
  id int not null primary key auto_increment,
  name varchar(20)
   )default charset=utf8;

-- 课程表
create table courses (
  id int not null primary key auto_increment,
  course_name varchar(20)
   ) default charset=utf8;
   
-- 选课表
create table student_course (
id int not null primary key auto_increment,
student_id int not null,
course_id int not null,
 constraint fk_student_course_student foreign key student_course(student_id)
     references students(id),
 constraint fk_student_course_course foreign key student_course(course_id)
     references courses(id)
) default charset=utf8;

 

删除外键

alter table 表名 drop constraint foreign key 外键名称

alter table student_course drop constraint fk_student_course_students;

--删除student_course与students的外键约束后,添加于students(ID)不关联的元素不再报错。

 

posted on 2022-04-06 22:33  LeoZhangJing  阅读(58)  评论(0编辑  收藏  举报

导航