MySQL多表

news2024/12/25 12:36:08

表关系

1.一对多

  • 应用场景

    • 班级和学生

    • 部门和员工

  • 建表原则

    • 设置(ForeginKey)外键连接

      • 一个表的外键即为另外一张表的主键,以此简历两张表的关系

    • 因此需要再学生表中新增一列,命名为 班级表_id,即班级表的主键,又叫学生表的外键

    • ALTER TABLE student
      ADD column class_id int
      comment '班级';
      
  • 外键(一对多的关系下外键加在多的一方

    • 物理外键

      • alter table emp add constraint 外键名称 foreign key (外键字段) references emp (另一个表的主键);

      • 不允许使用

        • 会影响增删改的效率(因为要检查外键关系)

        • 仅用于单节点数据,不适用于分布式、集群场景

        • 容易引发数据库的死锁问题,消耗性能

    • 逻辑外键(常用

      • 就是在表中创建一个普通字段,这个字段保存另外一张表的主键值

      • ALTER TABLE stu_course_relation
        ADD column course_id int
        comment '班级id';
        

2.一对一

  • 应用场景(外键一般插在基本信息表位置

    • 丈夫和妻子

    • 人和身份证号

  • 建表原则

    • 外键列设置唯一约束

3.多对多

  • 应用场景

    • 学生和课程

      • 一个学生可能选多个课程,一个课程可能被多个学生选择

    • 老师和学生和班级

      • 一个老师可能教多个学生,一个老师也可能教多个班级

  • 建表原则

    • 多对多其实由二个一对多组成

    • 需要借助于第三张表(中间表),需要有至少二个外键字段分别指向各自的主键,建立关联关系

多表查询

1.内连接

  • 查询二张表的交集部分

  • 语法

    • 隐式内连接

      • select ... from 左表,右表 where 连接条件;

      • 要取别名符合规范(下面这段不符合规范)

      • select student.*,class.name from class,student where student.class_id = class.id;
      • select s.studentName as '学生姓名',c.name as '学生班级' from class as c ,student as s where c.id = s.class_id;
    • 显示内连接

      • select ... from 左表 inner join 右表 on 连接条件;(前后关系无)

      • select student.*,class.name from class inner join student on student.class_id = class.id;
        

2.外连接

  • 左外连接

    • 查询左表全部,再去匹配右表,有就显示,没有显示null

    • 语法

      • select ... from 左表 left [outer] join 右表 on 连接条件;

      • select student.*,class.name from student left join class on student.class_id = class.id;
      • select * from student left join stu_course_relation as scr on student.id = scr.stu_id
                      left join course as c on scr.course_id = c.id;
      • #查询课程被哪些学生选择了(课程名+学生名)
        select course.name,s.studentName from course
            left join stu_course_relation scr on course.id = scr.course_id
            left join student s on s.id = scr.stu_id;
  • 右外连接(与左连接逻辑相同)

3.子查询

  • 标量子查询

    • SELECT 字段列表 FROM 表 WHERE 字段名 = (子查询);

  • 列子查询

    • SELECT 字段列表 FROM 表 WHERE 字段名 in (子查询);

  • 行子查询

  • 表子查询

4.多表连接 

 5.规律

  • 1。确定几张表

  • 2。确定连接条件

    • on关键字

  • 3。确定业务条件

    • where关键字

  • 4。确定显示字段

事物

1.含义

  • 是指的一组sql作为一个工作单元,要么都成功,要么都失败

2.操作 

  • begin/start transaction(开启事物)

  • 中间语句

  • commit(提交)

  • rollback(回滚)

3.事物特性(ACID)

  • A(Atomic)

    • 原子性

      • 不可分割,不可能只执行其中一部分

  • C(Consistency)

    • 一致性

      • 数据总是从一种一致性状态转换到另一种一致性状态

      • 主要指的是事务执行后,数据的完整性,数据业务逻辑等要正确,这样才能保证数据转换始终一致

  • I(Isolation)

    • 隔离性

      • 通常来讲,一个事物所做的修改对其他的事务是不可见的

  • D(Durability)

    • 持久性

      • 事务一旦提交,事务对数据做的修改永久保存到数据库中

4.数据库隔离级别

  • 读未提交(Read Uncommitted)(产生脏读(脏数据))

    • 在事物(一组sql运行)中可以查看到其他事务还未提交的修改

  • 读已提交(Read Committed)(产生不可重复读(一个事务里多次对同一行数据进行读取,但是读取到的结果是不一样的)但是解决了脏读

    • 一个事务可以看到其他事务提交后的修改,但在该事务提交之前,所做的修改对其他事务不可见

  • 可重复读(Repeatable Read)(解决了不可重复读,但是无法解决幻读,幻读指A事务读取某个范围内(多行)记录时,其他事务又在该范围内插入了新的数据,A事务再次读取该范围时产生了幻行

    • MySQL 默认

      • 一个事务中对同一行数据进行多次读,读到的结果是一样的

  • 串行化(Serialization)

    • 最高级别,强制所有事务按顺序执行,解决了幻读,但是效率低下

  • 查看隔离级别SELECT @@transaction_isolation;

面试题 

1.解释数据库事务四大特征

  • A(Atomic)

    • 原子性

      • 不可分割,不可能只执行其中一部分

  • C(Consistency)

    • 一致性

      • 数据总是从一种一致性状态转换到另一种一致性状态

      • 主要指的是事务执行后,数据的完整性,数据业务逻辑等要正确,这样才能保证数据转换始终一致

  • I(Isolation)

    • 隔离性

      • 通常来讲,一个事物所做的修改对其他的事务是不可见的

  • D(Durability)

    • 持久性

      • 事务一旦提交,事务对数据做的修改永久保存到数据库中

2.说出数据库隔离级别以及各自解决了什么问题

 

3.什么是脏读,不可重复读,幻读

 脏读(Dirty Read)是数据库系统中的一种常见问题,它指的是在事务处理过程中,由于某些原因,数据没有被正确地更新或提交,导致其他事务看到的数据不是最新的。

不可重复读(Non-Repeatable Read)是数据库事务隔离级别的问题之一,它发生在多个事务并发执行时,一个事务在读取某些数据后,另一个事务对这些数据进行了修改,然后第一个事务再次读取这些数据时,发现数据发生了变化。 

 幻读(Phantom Read)是数据库事务隔离级别的问题之一,它发生在多个事务并发执行时,一个事务在执行过程中,另一个事务插入或删除了符合当前事务查询条件的行,导致第一个事务在后续的查询中看到了之前未见的行,或者之前看到的行消失了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【力扣】572.另一棵树的子树

题目描述 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看…

电脑屏幕录制工具分享5款,附上详细电脑录屏教程(2024全新)

日月更迭,转眼间已经来到了2024年的立秋,在这个数字技术快速发展的时代,电脑录屏技术已经成为了一项不可或缺的技能,无论是用于工作汇报、在线教学、游戏直播还是个人娱乐。那么录屏软件哪个好用呢?接下来,…

QT按钮组

目录 按钮组 Push Button(按钮) Tool Button(图片文字) Radio Button(单选) Check Button(多选) Command Link Button Dialog Button Box(对话按钮) 按钮组 Push Button(按钮&#xff09…

手机游戏录屏软件哪个好,3款软件搞定游戏录屏

在智能手机普及的今天,越来越多的人喜欢在手机上玩游戏,并希望能够录制游戏过程或者分享游戏技巧。然而,面对市面上众多的手机游戏录屏软件,很多人可能会陷入选择困难。究竟手机游戏录屏软件哪个好?在这篇文章中&#…

数据跨境传输的安全合规风险如何规避?获取免费解决方案白皮书

在全球化的背景下,企业进行有 效的资源整合,学习海外市场的先进技术和管理经验,寻找新的增长点,实现业务的多元化和 可持续发展,不仅有利于开辟新市场,更有助于巩固和增强企业在全球中的地位。在这种前景 下…

如何把项目上传到Gitee(超详细保姆级教程)

目录预览 一、远程仓库1、新建远程仓库1.1 克隆/下载信息介绍 2、新建分支3、配置私人令牌 二、本地仓库1、初始化本地仓库2、创建分支,并切换到该分支3、设置用户名、邮箱3.1 全局3.2 局部 4、设置Remote地址4.1 远程仓库有文件4.2 远程仓库没有文件 5、拉取最新代…

全面掌握Xilinx FPGA开发技术与实战技巧

FPGA以其灵活性、可定制性和并行处理能力,为工程师提供了实现创新解决方案的强大工具。对于初学者来说,学习FPGA开发需要掌握一些基础知识和技能。 学习FPGA必备的基础知识点: 数字逻辑基础:理解基本的数字逻辑概念,…

基于danceTrack相关论文代码列表

文章目录 数据集下载2023Observation-Centric SORT: Rethinking SORT for Robust Multi-Object Tracking 数据集下载 https://github.com/DanceTrack/DanceTrack 2023 Observation-Centric SORT: Rethinking SORT for Robust Multi-Object Tracking code: https://github.c…

微型导轨:光学仪器精准定位的支撑者

微型导轨是指宽度在25mm以下的导轨系统,通常由导轨和滑块组成,具有体积小、重量轻、精度高、噪音低、寿命长等特点。主要用于支撑和定位光学元件,如镜子、透镜、滤光片等。微型导轨通过提供高精度的运动控制,‌有利于提高设备的性…

重磅发布 |《一本书讲透数据资产入表》在全球数据资产大会上发布

2024年8月2日,全球数据资产大会在厦门举行,数据资产管理标杆厂商亿信华辰正式发布全新力作《一本书讲透数据资产入表》,荣获“数据资产十大先锋机构”,并发表主题演讲,展现其在数据资产管理领域的领军风采与创新实力。…

macOS Java多版本管理工具

macOS Java多版本管理工具 可以使用 sdkman,也可以使用jenv 能用 sdkman 就建议使用 sdkman ,用不了就使用 jenv # sdkman的安装及使用 蚁景网安学院-一个开放的网络安全交流学习论坛 # jenv 的安装及使用 # 安装JDK8 下载 JDK8 JDK8下载页面&…

Ubuntu环境安装MySQL

Ubuntu环境安装MySQL 1. 访问下载界面并下载发布包2. 安装发布包3. 安装MySQL 1. 访问下载界面并下载发布包 下载地址 也可直接去mysql.com官网下载 这里如果要下载其他版本的或可以去http://repo.mysql.com/这个网页查询相关的版本。 2. 安装发布包 使用切换到root用户…

美元兑人民币汇率的变化,对A股直接影响是什么

美元兑人民币汇率的变化对A股的直接影响是复杂且多面的,主要体现在以下几个方面: 一、市场情绪与投资者信心 汇率波动引发市场担忧:当美元兑人民币汇率大幅波动时,尤其是人民币贬值,可能会引发市场担忧,影…

数据复盘“黑色星期一”:加密市场震荡,代币表现如何?

8月5日的“黑色星期一”成为了全球金融市场的动荡日,这一波及到加密市场的剧烈震荡导致了大量清算事件和代币的暴跌。本文将通过数据复盘,分析这一事件中加密货币的表现,并探讨未来市场的可能走向。 一、暴跌中的惨痛数据 在“黑色星期一”事…

Linux初次体验

Linux系统也是的命令字符也是多的离谱,本来不想写的就顺便写写吧 首先 ctrlaltT 打开终端 这里我就创建了一个文件,test,使用 vi 文件名.c 默认模式是命令行模式 无法写代码的 输入 i 后进入输入模式,开始写代码 退出输入模式…

032_java.util.concurrent.ConcurrentHashMap

继承体系 HashMap是我们用得非常频繁的一个集合,但是由于它是非线程安全的,在多线程环境下,put操作是有可能产生死循环的,导致CPU利用率接近100%。为了解决该问题,提供了Hashtable和Collections.synchronizedMap(hashM…

小米教你:2GB内存搞定20亿数据的高效算法

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! Hello,大家好!我是小米,今天要和大家聊聊一个非常有意思的算法实战问题——在2GB内存中,如何在20亿个整数中找到出现次数最多的数。这个问题涉及到大…

Three.js利用webgl着色器控制顶点位置打造波浪形状

<template> </template><script setup> import * as THREE from three import gsap from gsap //导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入 dat.gui import { GUI } from three/addons/libs/lil-gui…

02 Canal的安装使用

1 下载Canal Cannal下载地址如下&#xff1a;https://github.com/alibaba/canal/releases,这里选择Canal 1.1.4版本下载。2 上传解压 #首先创建目录 “/software/canal” [rootnode3 ~]# mkdir -p /software/canal#将Canal安装包解压到创建的canal目录中 [rootnode3 ~]# tar …

反序列化--serial

去vulhub上下载此靶机&#xff1a;https://www.vulnhub.com/entry/serial-1,349/ 用Vmware新建虚拟机打开 用kali扫描ip arp-scan -l 访问扫描到的靶机ip访问 按F12 ---》网络---》cookie得到一串编码 base64解码 dirb http://靶机ip 扫描目录 访问backup目录 解压得到三个p…