MySQL-基础点

news2024/9/23 15:22:46

目录

MySQL概念

数据库三大范式是什么?

blob 和 text 有什么区别?

DATETIME 和 TIMESTAMP 的异同?

MySQL 中 in 和 exists 的区别?

MySQL 里记录货币用什么字段类型比较好?

MySQL 怎么存储 emoji?

用过哪些 MySQL 函数

用过哪些字符串函数来处理文本?

用过哪些数值函数?

用过哪些日期和时间函数?

用过哪些汇总函数?

用过哪些逻辑函数?

用过哪些格式化函数?

用过哪些类型转换函数?

count(*) 和 count(1) 有什么区别?哪个性能最好?

count()遍历顺序

count主键和count非主键结果会不同吗?

Mysql内连接、外连接有什么区别

外连接时on和where过滤条件区别?

MySQL 第 3-10 条记录怎么查?(补充)

having和where的区别?

delete、drop、truncate有什么区别?

联合查询中union和union all 的区别是什么?

一条 SQL 查询语句的执行顺序?


MySQL概念

MySQL 是一个开源的关系型数据库管理系统,现在隶属于 Oracle 旗下,也是我用得最多的一款关系型数据库。

与此同时,MySQL 也是我们国内使用频率最高的一种数据库,我在本地安装的是最新的 8.0 社区版。

数据库三大范式是什么?

  • 第一范式保证每一列不可再分
  • 第二范式前提是满足第一范式,要求数据库表中的每一列都和主键直接相关,而不能只与主键的某一部分相关(主要针对联合主键)。
  • 第三范式前提是满足第一和第二范式,第三范式需要消除非主键列对主键的传递依赖,即非主键列只依赖于主键列,不依赖于其他非主键列

blob 和 text 有什么区别?

  • blob 用于存储二进制数据,而 text 用于存储大字符串。
  • blob 没有字符集,text 有一个字符集,并且根据字符集的校对规则对值进行排序和比较

DATETIME 和 TIMESTAMP 的异同?

相同点:

  1. 两个数据类型存储时间的表现格式一致。均为 YYYY-MM-DD HH:MM:SS
  2. 两个数据类型都包含「日期」和「时间」部分。
  3. 两个数据类型都可以存储微秒的小数秒(秒后 6 位小数秒)

区别:

DATETIME 和 TIMESTAMP 的区别

  1. 日期范围:DATETIME 的日期范围是 1000-01-01 00:00:00.0000009999-12-31 23:59:59.999999;TIMESTAMP 的时间范围是1970-01-01 00:00:01.000000 UTC 到 ``2038-01-09 03:14:07.999999 UTC
  2. 存储空间:DATETIME 的存储空间为 8 字节;TIMESTAMP 的存储空间为 4 字节
  3. 时区相关:DATETIME 存储时间与时区无关;TIMESTAMP 存储时间与时区有关,显示的值也依赖于时区
  4. 默认值:DATETIME 的默认值为 null;TIMESTAMP 的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP)

MySQL 中 in 和 exists 的区别?

MySQL 中的 in 语句是把外表和内表作 hash 连接,而 exists 语句是对外表作 loop 循环,每次 loop 循环再对内表进行查询

我们可能认为 exists 比 in 语句的效率要高,这种说法其实是不准确的,要区分情景:

  1. 如果查询的两个表大小相当,那么用 in 和 exists 差别不大。
  2. 如果两个表中一个较小,一个是大表,则子查询表大的用 exists,子查询表小的用 in。
  3. not in 和 not exists:如果查询语句使用了 not in,那么内外表都进行全表扫描,没有用到索引;而 not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用 not exists 都比 not in 要快。

MySQL 里记录货币用什么字段类型比较好?

货币在数据库中 MySQL 常用 Decimal 和 Numric 类型表示,这两种类型被 MySQL 实现为同样的类型。他们被用于保存与货币有关的数据。

例如 salary DECIMAL(9,2),9(precision)代表将被用于存储值的总的小数位数,而 2(scale)代表将被用于存储小数点后的位数。存储在 salary 列中的值的范围是从-9999999.99 到 9999999.99。

DECIMAL 和 NUMERIC 值作为字符串存储,而不是作为二进制浮点数,以便保存那些值的小数精度。

之所以不使用 float 或者 double 的原因:因为 float 和 double 是以二进制存储的,所以有一定的误差。

MySQL 怎么存储 emoji?

MySQL 的 utf8 字符集仅支持最多 3 个字节的 UTF-8 字符,但是 emoji 表情(😊)是 4 个字节的 UTF-8 字符,所以在 MySQL 中存储 emoji 表情时,需要使用 utf8mb4 字符集。

MySQL 8.0 已经默认支持 utf8mb4 字符集,可以通过 SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; 查看。

ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

用过哪些 MySQL 函数

MySQL 支持很多内置函数,包括执行计算、格式转换、日期处理等。我说一些自己常用的。

用过哪些字符串函数来处理文本?
  • CONCAT(): 连接两个或多个字符串。
  • LENGTH(): 返回字符串的长度。
  • SUBSTRING(): 从字符串中提取子字符串。
  • REPLACE(): 替换字符串中的某部分。
  • LOWER()UPPER(): 分别将字符串转换为小写或大写。
  • TRIM(): 去除字符串两侧的空格或其他指定字符。
用过哪些数值函数?
  • ABS(): 返回一个数的绝对值。
  • CEILING(): 返回大于或等于给定数值的最小整数。
  • FLOOR(): 返回小于或等于给定数值的最大整数。
  • ROUND(): 四舍五入到指定的小数位数。
  • MOD(): 返回除法操作的余数。
用过哪些日期和时间函数?
  • NOW(): 返回当前的日期和时间。
  • CURDATE(): 返回当前的日期。
  • CURTIME(): 返回当前的时间。
  • DATE_ADD()DATE_SUB(): 在日期上加上或减去指定的时间间隔。
  • DATEDIFF(): 返回两个日期之间的天数。
  • DAY(), MONTH(), YEAR(): 分别返回日期的日、月、年部分。
用过哪些汇总函数?
  • SUM(): 计算数值列的总和。
  • AVG(): 计算数值列的平均值。
  • COUNT(): 计算某列的行数。
  • MAX()MIN(): 分别返回列中的最大值和最小值。
  • GROUP_CONCAT(): 将多个行值连接为一个字符串。
用过哪些逻辑函数?
  • IF(): 如果条件为真,则返回一个值;否则返回另一个值。
  • CASE: 根据一系列条件返回值。
  • COALESCE(): 返回参数列表中的第一个非 NULL 值。
用过哪些格式化函数?
  • FORMAT(): 格式化数字为格式化的字符串,通常用于货币显示。
用过哪些类型转换函数?
  • CAST(): 将一个值转换为指定的数据类型。
  • CONVERT(): 类似于CAST(),用于类型转换。

count(*) 和 count(1) 有什么区别?哪个性能最好?

  • count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为 NULL
  • count(1)包括了所有列,用 1 代表代码行,在统计结果的时候,不会忽略列值为 NULL
  • count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者 0,而是表示 null)的计数,即某个字段值为 NULL 时,不统计。

count()遍历顺序

count(1)、 count(*)、 count(主键字段)在执行的时候,如果表里存在二级索引,优化器就会选择二级索引进行扫描。

所以,如果要执行 count(1)、 count(*)、 count(主键字段) 时,尽量在数据表上建立二级索引,这样优化器会自动采用 key_len 最小的二级索引进行扫描,相比于扫描主键索引效率会高一些。

再来,就是不要使用 count(字段) 来统计记录个数,因为它的效率是最差的,会采用全表扫描的方式来统计。如果你非要统计表中该字段不为 NULL 的记录个数,建议给这个字段建立一个二级索引。

count主键和count非主键结果会不同吗?

主键是不能存NULL值的,所以count主键代表统计表中所有行数据的数量。

而非主键是可以存NULL值的,所以count非主键统计的是表中这个列的非NULL值的数量。

Mysql内连接、外连接有什么区别

内连接和外连接都是用于连表查询。

内连接是只返回两个表匹配的数据行,外连接可以返回两个表匹配和不匹配的数据行,外连接主要分为左连接和右连接

  • 左连接返回左表中的所有行和右表中匹配的行。如果右表中没有匹配的行,则用 NULL 值填充
  • 右连接返回右表中的所有行和左表中匹配的行,如果左表中没有匹配的行,则用 NULL 值填充

------------------------------------------------------------------------------------

  • 交叉连接(cross join):返回第一个表中的每一行与第二个表中的每一行的组合,这种类型的连接通常用于生成笛卡尔积。
  • 笛卡尔积:数学中的一个概念,例如集合 A={a,b},集合 B={0,1,2},那么 A✖️B={<a,0>,<a,1>,<a,2>,<b,0>,<b,1>,<b,2>,}

外连接时on和where过滤条件区别?

ON条件用于连接的匹配(在连接操作之前执行),WHERE条件用于对连接后的结果进行筛选

MySQL 第 3-10 条记录怎么查?

在 MySQL 中,要查询第 3 到第 10 条记录,可以使用 limit 语句,结合偏移量 offset 和行数 row_count 来实现。

limit 语句用于限制查询结果的数量,偏移量表示从哪条记录开始,行数表示返回的记录数量。

SELECT * FROM table_name LIMIT 2, 8;
  • 2:偏移量,表示跳过前两条记录,从第三条记录开始。
  • 8:行数,表示从偏移量开始,返回 8 条记录。

偏移量是从 0 开始的,即第一条记录的偏移量是 0;如果想从第 3 条记录开始,偏移量就应该是 2。

having和where的区别?

在GROUP BY 分组查询过程中,Where 是工作在GROUP BY之前Where 是对分组之前的数据进行筛选,无法使用聚合函数

Having 是工作在GROUP BY之后,Having 主要对分组之后的数据进行筛选,可以使用聚合函数

delete、drop、truncate有什么区别?

  • delete 是删除表中的数据,我们可以选择删除部分数据或者全部数据,delete 删除的数据是可以回滚的,delete 操作并不是真的把数据删除掉了,而是给数据打上删除标记,目的是为了空间复用,所以 delete 删除表数据,磁盘文件的大小是不会缩减的。
  • drop 是删除表结构和表中所有的数据truncate 是只删除表中所有的记录,表结构并不会被删除,drop 和 truncate 删除的数据都是不可以回滚的,并且删除表会立刻释放磁盘空间
  • 从删除表的性能来看,drop>truncate>delete

联合查询中union和union all 的区别是什么?

UNION:在合并结果集后会自动剔除重复的行

UNION ALL: 则会保留所有的重复行,不会进行去重操作

一条 SQL 查询语句的执行顺序?                          

自己整理,借鉴很多博主,感谢他们

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

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

相关文章

.NET MAUI开源架构_2.什么是 .NET MAUI?

1.什么是.NET MAUI&#xff1f; .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架&#xff0c;用于使用 C# 和 XAML 创建本机移动和桌面应用。使用 .NET MAUI&#xff0c;可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。 .NET MAUI 是一款…

Flower花所比特币交易及交易费用科普

在加密货币交易中&#xff0c;选择一个可靠的平台至关重要。Flower花所通过提供比特币交易服务脱颖而出。本文将介绍在Flower花所进行比特币交易的基础知识及其交易费用。 什么是Flower花所&#xff1f; Flower花所是一家加密货币交易平台&#xff0c;为新手和资深交易者提供…

Python + OpenCV 简单车辆统计

目录 1 源码 2 运行结果 Python OpenCV 简单车辆统计 IDE : PyChram 1 源码 函数 car_count() 简单车辆统计 # 这是一个示例 Python 脚本。# 按 ShiftF10 执行或将其替换为您的代码。 # 按 双击 Shift 在所有地方搜索类、文件、工具窗口、操作和设置。 import cv2 impor…

Mojo语言的运用

1.Mojo语言概述 1.1什么是Mojo语言&#xff1f; Mojo语言是一种现代的动态编程语言&#xff0c;主要用于Web开发。它结合了多种语言的优点&#xff0c;如JavaScript、Perl和Lua&#xff0c;旨在为开发者提供&#xff1a; 简洁的语法&#xff1a;易于学习和使用&#xff0c;适…

课程设计——Python+OpenCV数字图像处理[车牌识别]

Python opencv 车牌识别 数字图像处理课程设计作业Python3OpenCV使用tkinter搭建界面tmp/文件夹是数字图像处理过程chepai/文件夹是车牌图片pic/文件夹是程序界面图PPT文件是验收时要讲的程序是从网上学习的并自己弄的&#xff0c;不完善&#xff0c;识别率不高 开发环境配置…

Java核心篇之JVM探秘:垃圾回收算法与垃圾收集器

系列文章目录 第一章 Java核心篇之JVM探秘&#xff1a;内存模型与管理初探 第二章 Java核心篇之JVM探秘&#xff1a;对象创建与内存分配机制 第三章 Java核心篇之JVM探秘&#xff1a;垃圾回收算法与垃圾收集器 第四章 Java核心篇之JVM调优实战&#xff1a;Arthas工具使用及…

QT creator与VS2019 QT加载模块方法

QT creator与VS2019加载模块方法 QT creator&#xff0c;pro文件添加 VS2019 QT

JavaScript中的面向对象编程

OPP在JavaScript的表现方式&#xff1a;原型 传统的OPP&#xff1a;类 ● 对象&#xff08;实例&#xff09;由类实例化&#xff0c;类的功能类似于蓝图&#xff0c;通过蓝图来实现建筑&#xff08;实例&#xff09; ● 行为&#xff08;方法&#xff09;从类复制到所有实例 …

子进程继承父进程文件描述符导致父进程打开设备文件失败

开发过程中有时会遇到需要在程序中执行三方程序或者shell脚本&#xff0c;一般会通过system(), popen(), exec簇来完成该功能。我们知道以上方法会通过fork创建子进程后在子进程中执行相应指令。如图1为某个示例流程&#xff0c;具体的程序执行流程如图2所示&#xff0c;线程my…

Android ListView

ListView ListView是以列表的形式展示具体内容的控件&#xff0c;ListView能够根据数据的长度自适应显示&#xff0c;如手机通讯录、短消息列表等都可以使用ListView实现。如图1所示是两个ListView&#xff0c;上半部分是数组形式的ListView&#xff0c;下半部分是简单列表Lis…

WPF学习(5) -- WPF绑定

一、双向绑定 1.代码示例 <Window x:Class"学习.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expres…

批量导出word,并导出一个zip文件

系统导出功能&#xff0c;多条数据分别导出word&#xff0c;多个word打包到一个zip进行导出&#xff0c;直接拷贝过去可用&#xff0c;如果缺包自行查找。 参考&#xff1a; Java使用word模板导出word_java根据模板导出word-CSDN博客. Action(value "exportToWordZip&qu…

高阶数据结构——并查集

1. 并查集的介绍 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题&#xff08;即所谓的并、查&#xff09;。 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#…

springboot+vue 开发记录(九)后端打包部署运行

本篇文章主要内容是后端项目写好了&#xff0c;怎么打包部署到服务器上运行。 文章目录 1. 在服务器上安装Docker2. 在Docker中装MySQL3. 在Docker中设置网桥&#xff0c;实现容器间的网络通信4. 修改后端配置文件5. 修改pom.xml文件6. 打包7. 编写DockerFile文件8. 上传文件到…

STFT:解决音频-视频零样本学习 (ZSL) 中的挑战

传统的监督学习方法需要大量的标记训练实例来进行训练,视听零样本学习的任务是利用音频和视频模态对对象或场景进行分类&#xff0c;即使在没有可用标记数据的情况下。为了解决传统监督方法的限制&#xff0c;提出了广义零样本学习&#xff08;Generalized Zero-Shot Learning,…

暴雨让服务器不怕热҈热҈热҈热҈

在AI算力呈几何倍数增长的趋势下&#xff0c;算力逐渐朝着“高性能、高密度、高耗能“发展。在高耗能的算力下&#xff0c;AI服务器功率已逐步逼近风冷散热极限&#xff0c;而液冷作为更加高效、低能耗的制冷技术&#xff0c;逐渐成为了高密度算力散热场景的首选方案。 液冷的…

Spring源码中的模板方法模式

1. 什么是模板方法模式 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为设计模式&#xff0c;它在操作中定义算法的框架&#xff0c;将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法模式的定义&…

Linux内核编译安装 - Deepin,Debian系

为什么要自己编译内核 优点 定制化&#xff1a;你可以根据自己的硬件和需求配置内核&#xff0c;去掉不必要的模块&#xff0c;优化性能。性能优化&#xff1a;移除不需要的驱动程序和特性&#xff0c;减小内核体积&#xff0c;提高系统性能。最新特性和修复&#xff1a;获取…

网络(二)——套接字编程

文章目录 理解源IP地址和目的IP地址认识端口号认识TCP/UDP协议网络字节序socket编程接口socket 常见APIsockaddr结构 理解源IP地址和目的IP地址 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址&#xff1b; 源IP即发送方的地址&#xff0c;目的IP即接受方的…

[译] Rust标准库有些特殊,让我们改它

本篇是对 RustConf 2023中的The standard library is special. Let’s change that.这一视频的翻译与整理, 过程中为符合中文惯用表达有适当删改, 版权归原作者所有. 今天我将讨论Rust的标准库,更具体地说,是关于标准库有何特殊之处,以及为什么我们应该改变这一点。首先声明一下…