[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) 编辑 收藏 举报