一. 前言
表与 表之间有3种对应关系,分别是:
多对一:一张表中的一个字段中的多个值对应另外一张表中的一个字段值.(多个学生,可以学习同一门课程)
多对多;一张表中的一个字段值对应另外一张表中的多个字段值(一个作者可以写多本书籍,一本书也可以由多个作者联合编著)
一对一:一张表中一个字段值对应另外一个张表的一个字段值(一个用户名对应一个博客园的地址)
确认关系的方法:
表1 foreign key 表2
则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系
多对多:
表1的多条记录可以对应表2的一条记录
表2的多条记录也可以对应表1的一条记录 一对一:
表1的一条记录唯一对应表2的一条记录,反之亦然 分析时,我们先从按照上面的基本原理去套,然后再翻译成真实的意义,就很好理解了
一对一
#先建立被关联的表 create table user(id int primary key auto_increment,name char(15));
#插入用户数据
insert into user(name) values
("jack"),
("chen"),
("wang"),
("yaya"); #再创建关联表
create table blogs(id int primary key auto_increment,address varchar(50),
uid int not null unique,foreign key (uid) references user(id));
#插入数据
insert into blogs(address,uid) values
("www.cnblogs.com/jack",1),
("www.cnblogs.com/chen",2),
("www.cnblogs.com/yaya",4),
("www.cnblogs.com/wang",3);
一对一关系
多对一:
多对一关系:
1.建立被关联表
create table courses(id int primary key auto_increment,name char(10));
insert into courses(name) values
("英语"),
("语文"),
("数学"); 2.建立关联表 create table students(id int primary key auto_increment,name char(10),course_id int,foreign key (course_id) references courses(id));
insert into students(name,course_id) values
("jack",1),
("chen",1),
("yaya",3),
("wang",3),
("lilei",2); select * from students;
+----+-------+-----------+
| id | name | course_id |
+----+-------+-----------+
| 1 | jack | 1 |
| 2 | chen | 1 |
| 3 | yaya | 3 |
| 4 | wang| 3 |
| 5 | lilei | 2 |
+----+-------+-----------+ select * from courses;
+----+--------+
| id | name |
+----+--------+
| 1 | 英语 |
| 2 | 语文 |
| 3 | 数学 |
+----+--------+
多对一
多对多关系
#多对多关系
#1.创建被关联表
create table author1 (id int primary key auto_increment,name char(10));
insert into author1 (name) values
("jack"),
("chen"),
("wang"),
("lili"),
("lucy"),
("lilei"); create table book1(id int primary key auto_increment,name char(6));
insert into book1(name) values
("python入门"),
("linux精通"),
("go实战"); #2.创建关联表,book_id和author_id联合唯一,避免出现重复的现象 create table book2author1(id int primary key auto_increment,book_id int not null ,author_id int not null, unique(book_id,author_id),
foreign key(book_id) references book1(id) on delete cascade on update cascade,
foreign key(author_id) references author1(id) on delete cascade on update cascade); insert into book2author1(book_id,author_id)values
(1,1),
(1,5),
(2,4),
(2,6),
(3,2),
(3,3);
多对多关系