阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL表与表之间的关系

1,233次阅读
没有评论

共计 4447 个字符,预计需要花费 12 分钟才能阅读完成。

表与表之间的关系

表 1 foreign key 表 2
则表 1 的多条记录对应表 2 的一条记录,即多对一

利用 foreign key 的原理我们可以制作两张表的多对多,一对一关系
多对多:表 1 的多条记录可以对应表 2 的一条记录 表 2 的多条记录也可以对应表 1 的一条记录 一对一:表 1 的一条记录唯一对应表 2 的一条记录,反之亦然 分析时,我们先从按照上面的基本原理去套,然后再翻译成真实的意义,就很好理解了

1、先确定关系

2、找到多的一方,把关联字段写在多的一方

一对多

 多对一或者一对多(左边表的多条记录对应右边表的唯一一条记录)

 需要注意的:

  • 1. 先建被关联的表,保证被关联表的字段必须唯一。
  • 2. 在创建关联表,关联字段一定保证是要有重复的。

示例:

这是一个书和出版社的一个例子,书要关联出版社(多个书可以是一个出版社,一个出版社也可以有好多书)。

谁关联谁就是谁要按照谁的标准。

MySQL 表与表之间的关系

  • 创建表
    书要关联出版社
    被关联的表
    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);
  • 运行结果

 MySQL 表与表之间的关系

一对一

 示例一:

用户和管理员(只有管理员才可以登录,一个管理员对应一个用户)

管理员关联用户

MySQL 表与表之间的关系

  • 创建表
    先建被关联的表
    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');
  • 运行结果

 MySQL 表与表之间的关系

示例二:

学生表和客户表

MySQL 表与表之间的关系

  • 创建表
    create table customer(
    id int primary key auto_increment,
    name varchar(10),
    qq int unique,
    phone int unique
    );
    
    create table student1(
    sid int primary key auto_increment,
    course char(20),
    class_time time,
    cid int unique,
    foreign key(cid) references customer(id)
    on delete cascade
    on update cascade
    );
  • 插入数据
    insert into customer(name,qq,phone) values('小小 ',13564521,11111111),(' 嘻哈 ',14758254,22222222),(' 王维 ',44545522,33333333),(' 胡军 ',545875212,4444444),(' 李希 ',145578543,5555555),(' 李迪 ',754254653,8888888),(' 艾哈 ',74545145,8712547),(' 啧啧',11147752,7777777);
    
    insert into student1(course,class_time,cid) values('python','08:30:00',3),('python','08:30:00',4),('linux','08:30:00',1),('linux','08:30:00',7);
  • 运行结果

 MySQL 表与表之间的关系

多对多

书和作者(我们可以再创建一张表,用来存 book 和 author 两张表的关系)

要把 book_id 和 author_id 设置成联合唯一

联合唯一:unique(book_id,author_id) 

联合主键:alter table t1 add primary  key(id,avg)

多对多:一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对

 

关联方式:foreign key+ 一张新的表

示例:

MySQL 表与表之间的关系

MySQL 表与表之间的关系

  • 创建表
    ========书和作者,另外在建一张表来存书和作者的关系
    #被关联的
    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(5)
    );
    
    #======== 关联的
    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('egon'),('e1'),('e2'),('e3'),('e4');
    
    insert into author2book(book_id,author_id) values(1,1),(1,4),(2,1),(2,5),(3,2),(3,3),(3,4),(4,5);

多对多关系举例

用户表,用户组,主机表

  • 创建三张表
    -- 用户表
    create table user (id int primary key auto_increment,username varchar(20) not null,password varchar(50) not null);
    
    insert into user(username,password) values('egon','123'),('root',147),('alex',123),('haiyan',123),('yan',123);
    
    
    -- 用户组表
    create table usergroup(id int primary key auto_increment,groupname varchar(20)  not null unique);
    
    insert into usergroup(groupname) values('IT'),('Sale'),('Finance'),('boss');
    
    -- 主机表 CREATE TABLE host(id int primary key auto_increment,ip CHAR(15) not NULL UNIQUE DEFAULT '127.0.0.1'); insert into host(ip) values('172.16.45.2'),('172.16.31.10'),('172.16.45.3'),('172.16.31.11'),('172.10.45.3'), ('172.10.45.4'),('172.10.45.5'),('192.168.1.20'),('192.168.1.21'),('192.168.1.22'),('192.168.2.23'),('192.168.2.223'),
    ('192.168.2.24'),('192.168.3.22'),('192.168.3.23'),('192.168.3.24');
  • 建立关系
    -- 建立 user 和 usergroup 的关系表
    create table user2usergroup(id int not NULL UNIQUE auto_increment,
    user_id int not null,
    group_id int not NULL,
    PRIMARY KEY(user_id,group_id),
    foreign key(user_id) references user(id)
    ON DELETE CASCADE
    on UPDATE CASCADE ,
    foreign key(group_id) references usergroup(id)
    ON DELETE CASCADE
    on UPDATE CASCADE
    );
    
    insert into user2usergroup(user_id,group_id) values(1,1),(1,2),(1,3),(1,4),(2,3),(2,4),(3,4);
    
    -- 建立 user 和 host 的关系 create table user2host(id int not null unique auto_increment, user_id int not null, host_id int not null, primary key(user_id,host_id), foreign key(user_id) references user(id), foreign key(host_id) references host(id) ); insert into user2host(user_id,host_id) values(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(1,10),(1,11),(1,12),(1,13),(1,14),(1,15),(1,16),(2,2),(2,3),(2,4),(2,5),(3,10),(3,11),(3,12);

     

 

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-28发表,共计4447字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7963928
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流! 大家好,我是星哥,今天才思枯竭,不写技术文章了!来吐槽一下 CSDN。...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...