【每日八股】MySQL篇(一):概述

news2025/2/26 0:29:04

关系的三个范式是什么?

第一范式(1NF):用来确保每列的原子性,要求每列都是不可再分的最小数据单元
概括:表中的每一列都是不可分割的最小原子值,且每一行都是唯一的。
在这里插入图片描述

第二范式(2NF):在第一范式的基础上更进一层,要求表中的每列都和主键相关,即要求实体的唯一性。如果一个表满足第一范式(每一列都是不可再分的数据单元),并且除了主键以外的其它列全部都依赖于该主键,那么该表满足第二范式。
概括:满足 1NF,且所有非主键列完全依赖于主键。
在这里插入图片描述

第三范式(3NF):在第二范式的基础上更进一层,第三范式确保每列都和主键列直接相关,而不是间接相关,即限制列的冗余性。如果一个关系满足第二范式(表中的每列都和主键相关),且除了主键以外的其他列都依赖于主键列,列和列之间不存在依赖关系,则满足第三范式。
概括:满足 2NF,且所有非主键之间不存在传递依赖。
在这里插入图片描述

MySQL 中 char 和 varchar 的区别是什么?

一句话概括:CHAR固定长度的字符串类型,适合存储长度固定的数据,存储空间固定;VARCHAR可变长度的字符串类型,适合存储长度不固定的数据,存储空间根据实际内容动态分配。

具体来说:

  • CHAR 字段的最大长度为 255 字符,而 VARCHAR 字段的最大长度为 65535 字符。【如果定义 CHAR(10),无论存储的字符串长度是多少,MySQL 都会分配 10 个字符的存储空间,如果实际存储的字符串小于定义长度,MySQL 会用空格填充;而对于 VARCHAR(10),实际存储的字符串长度是多少,MySQL 就分配多少空间(额外需要 1 ~ 2 个字节存储字符串的长度信息),不会用空格填充剩余空间】
  • 补充:VARCHAR(10) 最多只能存储 10 个字符。如果尝试存储长度大于 10 的字符串,MySQL 会根据 SQL 模式决定是报错(严格模式)还是截断数据(非严格模式)。在 MySQL 中,VARCHAR(10) 中的 10 是必须指定的,不能忽略。VARCHAR 是一种可变长度的字符串类型,但它需要一个明确的最大长度限制,以便 MySQL 知道该字段最多可以存储多少字符。
  • CHAR 类型如果存的数据量小于最大长度,剩余的空间会使用空格填充,因此可能会浪费空间,所以 CHAR 类型适合存储长度固定的数据,这样不会浪费空间,效率还比 VARCHAR 略高;VARCHAR 类型如果存到数据量小于最大长度,剩余的空间会留给别的数据使用,所以 VARCHAR 类型适合存储长度不固定的数据,这样虽然没有 CHAR 存储效率高,但至少不会浪费空间。【CHAR 的存储效率高,但是可能浪费空间;VARCHAR 的存储效率不如 CHAR,但不会浪费空间;CHAR 适合存储定长数据,VARCHAR 适合存储变长数据】
  • CHAR 类型的查找效率高,VARCHAR 类型的查找效率低。【由于 CHAR 是固定长度,MySQL 在读取数据时可以直接计算出每一行的偏移量,访问速度更快,故 CHAR 不需要额外的计算来解析字符串的实际长度;而由于 VARCHAR 是可变长度,MySQL 在读取数据时需要先解析长度信息,然后再访问实际数据,这种额外的解析步骤会增加 CPU 开销,尤其是在处理大量数据时。】

SQL 如何实现模糊查询?

在 SQL 中,模糊查询通常使用 LIKE 关键字来实现。LIKE 允许你使用通配符来匹配符合特定模式的数据。LIKE 用于在 WHERE 子句中进行模糊匹配,它支持两种通配符:

  • %:匹配任意数量的字符(包括零个字符);
  • _:匹配单个字符。
    例如:
SELECT * FROM users WHERE name LIKE '张%';
SELECT * FROM users WHERE email LIKE '%example.com';
SELECT * FROM users WHERE name LIKE '%小%';
SELECT * FROM users WHERE name LIKE '_三';

join 和 left join 的区别?

JOIN 返回两个表匹配的行,LEFT JOIN 返回左表所有行(右表无匹配时补 NULL),RIGHT JOIN 返回右表所有行(左表无匹配时补 NULL)。
在这里插入图片描述

SELECT users.name, orders.amount
FROM users
JOIN orders ON users.id = orders.user_id;

在这里插入图片描述
在这里插入图片描述

SELECT users.name, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

在这里插入图片描述

SELECT 的执行过程?

SELECT 的执行过程包括 SQL 解析(包括词法分析和语法分析,如果 SQL 语句不对就会直接报错)、查询缓存(MySQL 8.0 之前,MySQL 8.0 之后不再包括查询缓存这一步)、查询优化、执行计划、数据读取和结果返回。

UPDATE 的执行过程?

UPDATE 的执行过程包括语法解析、查询优化、执行计划、数据读取、修改数据、事务处理(记录 Undo Log 和 Redo Log)以及结果返回。

COUNT 性能比较?

COUNT(*) 是最快的,因为 MySQL 对其进行了特殊优化;COUNT(1) 性能与 COUNT(*) 几乎相同;COUNT(column_name) 性能较差,尤其是列没有索引时(如果列有索引,MySQL 可以使用索引来加速统计,否则,MySQL 需要扫描整个表来统计非 NULL 值的数量,性能较差);COUNT(DISTINCT column_name) 性能最差,因为需要去重并统计不同值的数量。

补充:索引

在 MySQL 中,COUNT(column_name) 的性能与列的索引密切相关。这里的“索引”指的是数据库表中为某一列(或多列)创建的索引结构,用于加速数据的查找和统计操作。

什么是索引?

索引是一种数据结构,用于快速定位表中的特定数据。类似于书籍的目录,索引可以帮助数据库快速找到满足条件的行,而不需要扫描整个表。常见的索引类型包括:

  • B-Tree 索引:适用于等值查询和范围查询。
  • 哈希索引:适用于等值查询,但不支持范围查询。
  • 全文索引:适用于文本搜索。

索引的工作原理

  • B-Tree 索引是一种平衡树结构,支持快速查找、插入和删除操作。
  • 对于覆盖索引,当索引包含了查询所需的所有列,MySQL 可以直接从索引中获取数据,而不需要回表访问数据行。

优化建议

为常用的列创建索引可以提升查询性能,例如:

CREATE INDEX idx_email ON users (email);

drop、truncate 和 delete 的区别?

DROP 删除整个表(包括表结构和数据),操作不可逆;TRUNCATE 删除表中的所有数据但保留表结构,操作不可逆且性能较快;DELETE 删除表中的部分或全部数据但保留表结构操作可回滚但性能较慢
在这里插入图片描述
示例:

使用 DROP:

DROP TABLE users;

使用 TRUNCATE:

TRUNCATE TABLE users;

使用 DELETE:

DELETE FROM users WHERE id = 1;
DELETE FROM users;

MySQL 会出现死锁吗?怎么检测死锁?

MySQL 的 InnoDB 存储引擎可能会发生死锁,通常是由于多个事务相互等待锁资源导致的(事物 A 持有锁 1 并等待锁 2,而事物 B 持有锁 2 等待锁 1)。InnoDB 会自动检测死锁并回滚其中一个事务。可以通过错误日志、SHOW ENGINE INNODB STATUS 和 Performance Schema 来检测死锁。避免死锁的方法包括按顺序访问资源、减少事务长度和使用索引。

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

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

相关文章

Remainder Problem CF1207F

题目:题目链接 题目大意 题目描述 给你一个长度为 500000 的序列,初值为 0 ,你要完成 q 次操作,操作有如下两种: 1 x y : 将下标为 x 的位置的值加上 y2 x y : 询问所有下标模 x 的结果为 y 的位置的值之和 输入格…

SpringBoot之自定义简单的注解和AOP

1.引入依赖 <!-- AOP依赖--> <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.8</version> </dependency>2.自定义一个注解 package com.example.springbootdemo3.an…

自由学习记录(38)

python语法 def def print_receipt (store_name, items, total_price, cashier"Self-Checkout", payment_method"Credit Card"): Python 的 函数定义 语法 def print_receipt(...) → 定义了一个名为 print_receipt 的函数。store_name, items, total_…

【SQL实验】触发器

下载素材文件”tsgl”、“成绩管理”,将tsgl.bak和成绩管理.bak数据库还原到库中【导入操作在之前的文章中详细讲过】 触发器 1、为图书表设置更新触发器&#xff0c;根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录&#xff0c;然后更新书名、作者…

CPU多级缓存机制

目录 一、前置知识 ---- CPU的核心 1.1. 单核与多核CPU 二、CPU多级缓存机制 三. 缓存的基本结构/缓存的存储结构 四、CPU缓存的运作流程/工作原理 五、CPU多级缓存机制的工作原理【简化版】 5.1. 缓存访问的过程 (5.1.1) L1缓存&#xff08;一级缓存&#xff09;访问 …

神经网络八股(3)

1.什么是梯度消失和梯度爆炸 梯度消失是指梯度在反向传播的过程中逐渐变小&#xff0c;最终趋近于零&#xff0c;这会导致靠前层的神经网络层权重参数更新缓慢&#xff0c;甚至不更新&#xff0c;学习不到有用的特征。 梯度爆炸是指梯度在方向传播过程中逐渐变大&#xff0c;…

SmartMediakit之音视频直播技术的极致体验与广泛应用

引言 在数字化时代&#xff0c;音视频直播技术已经深入到各个行业和领域&#xff0c;成为信息传递和交流的重要手段。视沃科技自2015年成立以来&#xff0c;一直致力于为传统行业提供极致体验的音视频直播技术解决方案&#xff0c;其旗下的大牛直播SDK凭借强大的功能和卓越的性…

【R包】tidyplots----取代ggplot2的科研绘图利器

文章目录 介绍安装Usage文档参考 介绍 tidyplots----取代ggplot2的科研绘图利器。tidyplots的目标是简化为科学论文准备出版的情节的创建。它允许使用一致和直观的语法逐渐添加&#xff0c;删除和调整情节组件。 安装 You can install the released version of tidyplots fro…

DeepSeek 15天指导手册——从入门到精通 PDF(附下载)

DeepSeek使用教程系列--DeepSeek 15天指导手册——从入门到精通pdf下载&#xff1a; https://pan.baidu.com/s/1PrIo0Xo0h5s6Plcc_smS8w?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/2e8de75027d3 《DeepSeek 15天指导手册——从入门到精通》以系统化学习路径为核心&…

微信小程序实现拉卡拉支付

功能需求&#xff1a;拉卡拉支付&#xff08;通过跳转拉卡拉平台进行支付&#xff09;&#xff0c;他人支付&#xff08;通过链接进行平台跳转支付&#xff09; 1.支付操作 //支付 const onCanStartPay async (obj) > {uni.showLoading({mask: true})// 支付接口获取需要传…

Unity 第三人称人物切动画时人物莫名旋转

前提: 使用Starter Asset包中的第三人称插件包. 在给3D角色的动画器增加新动画时, 发现进入新动画会让角色莫名转动. 观察后发现是动画强行将朝向掰"正", 人物动画在进行时朝向会一直变化, 这使得动作非常的怪异. 对系动画进行以下处理后, 将可以解决这种不自然: 选…

启动Redis报错记录

突然启动Redis就报了个错&#xff1a;‘Could not create server TCP listening socket 127.0.0.1:6379: bind: 操作成功完成。‘ 查了下解决方案&#xff0c;应该是6379端口已绑定&#xff0c;服务没有关闭。 需要输入命令redis-cli 再输入shutdown 但又出现了新的问题&…

自然语言处理NLP 04案例——苏宁易购优质评论与差评分析

上一篇文章&#xff0c;我们爬取了苏宁易购平台某产品的优质评价和差评&#xff0c;今天我们对优质评价与差评进行分析 selenium爬取苏宁易购平台某产品的评论-CSDN博客 目录 1. 数据加载 2. 中文分词 3. 停用词处理 4. 数据标注与合并 5. 数据集划分 6. 文本特征提取 …

图片爬取案例

修改前的代码 但是总显示“失败” 原因是 修改之后的代码 import requests import os from urllib.parse import unquote# 原始URL url https://cn.bing.com/images/search?viewdetailV2&ccidTnImuvQ0&id5AE65CE4BE05EE7A79A73EEFA37578E87AE19421&thidOIP.TnI…

官方文档学习TArray容器

一.TArray中的元素相等 1.重载一下 元素中的 运算符&#xff0c;有时需要重载排序。接下来&#xff0c;我们将id 作为判断结构体的标识。 定义结构体 USTRUCT() struct FXGEqualStructInfo {GENERATED_USTRUCT_BODY() public:FXGEqualStructInfo(){};FXGEqualStructInfo(in…

Web刷题之PolarDN(中等)

1.到底给不给flag呢 代码审计 一道典型的php变量覆盖漏洞 相关知识 什么是变量覆盖漏洞 自定义的参数值替换原有变量值的情况称为变量覆盖漏洞 经常导致变量覆盖漏洞场景有&#xff1a;$$使用不当&#xff0c;extract()函数使用不当&#xff0c;parse_str()函数使用不当&…

学习笔记-250222

论文&#xff1a; Learning Hierarchical Prompt with Structured Linguistic Knowledge for Vision-Language Models 主要研究llm在图像分类中的能力&#xff0c;当提示输入目标类别时&#xff0c;llm能够生成相关的描述以及相应的结构化关系。 1.首先利用llm从普通的描述中获…

Unity游戏制作中的C#基础(1)界面操作基础

1.脚本有关注意事项 &#xff08;1&#xff09;.进入项目之后&#xff0c;一般创建一个文件夹Scripts用来存放c#脚本&#xff1b; &#xff08;2&#xff09;.在Scripts中创建脚本&#xff0c;双击脚本&#xff0c;进入VS编辑器&#xff0c;有如下结构&#xff1a; start&#…

为什么要将PDF转换为CSV?CSV是Excel吗?

在企业和数据管理的日常工作中&#xff0c;PDF文件和CSV文件承担着各自的任务。PDF通常用于传输和展示静态的文档&#xff0c;而CSV因其简洁、易操作的特性&#xff0c;广泛应用于数据存储和交换。如果需要从PDF中提取、分析或处理数据&#xff0c;转换为CSV格式可能是一个高效…

Android KMP初探

Android KMP初探 前言&#xff1a; 最近线上听了Kotlin官网举行的KMP会议&#xff0c;感觉听神奇的&#xff0c;于是就把官方demo下载下来尝试了一下&#xff0c;下载插件和所需要的依赖都用了很久&#xff0c;但是发现里面的代码很少&#xff0c;于是尝试自己手写了一下&…