表1 foreign key 表2
多对一:表 1 的多条记录对应表 2 的一条记录
利用foreign key的原理我们可以制作两张表的多对多,一对一关系
多对多:
表1的多条记录可以对应表2的一条记录
表2的多条记录也可以对应表1的一条记录
一对一:
表1的一条记录唯一对应表2的一条记录
1、先确立关系
2、找到多的一方,把关联字段写在多的一方
一、多对一或者一对多
1.先建被关联的表,保证被关联表的字段必须唯一。
2.在创建关联表,关联字段一定保证是要有重复的。
一个书和出版社的一个例子,书要关联出版社(多个书可以是一个出版社,一个出版社也可以有好多书)。
谁关联谁就是谁要按照谁的标准。
从这里看出来,书是关联者,出版社是被关联者。
书要关联出版社
被关联的表
create table press(
id int primary key auto_increment,
name char(20)
);
关联的表
create table book(
book_id int primary key auto_increment,
book_name varchar(20),
book_price int,
press_id int,
constraint Fk_pressid_id foreign key(press_id) references press(id)
on delete cascade
on update cascade
);
插记录
insert into press(name) values(‘新华出版社‘),
(‘海燕出版社‘),
(‘摆渡出版社‘),
(‘大众出版社‘);
insert into book(book_name,book_price,press_id) values(‘Python爬虫‘,100,1),
(‘Linux‘,80,1),
(‘操作系统‘,70,2),
(‘数学‘,50,2),
(‘英语‘,103,3),
(‘网页设计‘,22,3);
结果:
二、一对一
用户和管理员(只有管理员才可以登录,一个管理员对应一个用户)
用户被关联
先建被关联的表
create table user(
id int primary key auto_increment, #主键自增
name char(10)
);
在建关联表
create table admin(
id int primary key auto_increment,
user_id int unique,
password varchar(16),
foreign key(user_id) references user(id)
on delete cascade
on update cascade
);
insert into user(name) values(‘susan1‘),
(‘susan2‘),
(‘susan3‘),
(‘susan4‘),
(‘susan5‘),
(‘susan6‘);
insert into admin(user_id,password) values(4,‘sds156‘),
(2,‘531561‘),
(6,‘f3swe‘);
结果:
三、多对多
书和作者(我们可以再创建一张表,用来存book和author两张表的关系)
要把book_id和author_id设置成联合唯一
联合唯一:unique(book_id,author_id)
联合主键:alter table t1 add primary key(id,avg)
关联方式:foreign key 一张新表
#被关联的
create table book1(
id int primary key auto_increment,
name varchar(10),
price float(3,2)
);
#========被关联的
create table author(
id int primary key auto_increment,
name char(www.hxyl1618.com )
);
#========关联的
create table author2book(
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 author(id)
on delete cascade
on update cascade
);
#========插入记录
insert into book1(name,price) values(‘九阳神功‘,9.9),
(‘葵花宝典‘,9.5),
(‘辟邪剑谱‘,5),
(‘降龙十巴掌‘,7.3);
insert into author(name) values(www.haoranpkk.cn‘egon‘),(www.chuanchenpt.cn‘e1‘),(‘e2‘),(‘e3‘),(‘e4‘);
insert into author2book(book_www.yingchenyl.com id,author_www.yinchengyule.cn id) values(1,1),
(1,4),
(2,1),
(2,5),
(3,2),
(3,3),
(3,4),
(4,5);
总结:
在一对一中,unique 在关联表中
相关文章
- Hibernate中表与表之间的关联一对多,级联保存和级联删除
- mysql中一对一,一对多,多对多关系
- 了解SQL Server中所有数据库表之间的关系
- Lambda / LINQ查找多对多关系SQL表之间的关系
- MySQL:如何在多对多关系中创建两个表之间的映射
- ibatis配置多表关联(一对一、一对多、多对多)
- 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
- day 69-70 一对一 一对多 多对一联表查询
- MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表