当前位置: 首页 > news >正文

MySQL 核心知识点梳理(1)

目录

1.什么是数据库?

关系型数据库

非关系型数据库

2.Mysql出现性能差的原因?

3.MySQL的内联,左外联,右外连接的区别

 4.为什么要有三大范式

建表需要考虑的问题?

char和varchar的区别

blob和text的区别?

DATETIME和TIMESTAMP的区别

in和exists的区别

null值陷

5.记录货币用什么类型比较好

6.怎么存储emoji

7.DROP,DELETE,TRUNCATE的区别?

8.UNION和UNIONALL的区别

9.一条sql的执行流程

10.mysql中bin目录下的执行文件

11.隐式数据类型转换


1.什么是数据库?

数据库是按照数据结构来组织、存储和管理数据的仓库,它是计算机系统中用于高效存储和处理数据的核心组件。分为关系型数据库和非关系型数据库.

关系型数据库

采用关系模型(二维表格结构)来组织数据,强调数据的一致性和完整性,支持 SQL(结构化查询语言)进行操作。

  • MySQL:开源免费,性能稳定,易于部署和使用,是 Web 应用开发中最常用的数据库之一。
  • PostgreSQL:功能强大的开源关系型数据库,支持复杂的数据类型和高级查询,对事务的支持非常完善,适合对数据一致性要求高的企业级应用
  • Oracle:商业级关系型数据库,性能卓越,安全性高,支持大规模数据存储和并发处理,广泛应用于大型企业的核心业务系统,如银行的交易系统、电信的客户管理系统等。
  • SQL Server:微软推出的关系型数据库,与 Windows 系统和.NET 平台兼容性好,适合在微软技术栈环境下开发的应用,如企业内部的管理系统等。

非关系型数据库

  • MongoDB:文档型数据库,数据以类似 JSON 的文档形式存储,结构灵活,适合存储非结构化或半结构化数据,如博客文章、用户评论、产品描述等。
  • Redis:内存数据库,读写速度极快,支持多种数据结构(字符串、哈希、列表、集合等),常被用作缓存、会话存储、实时排行榜等场景。例如,电商网站的商品详情页缓存可以用 Redis 来提升访问速度。
  • Cassandra:分布式列存储数据库,具有高可用性、高扩展性和容错能力,适合处理海量数据,如社交网络的用户行为数据、物联网设备产生的海量日志数据等。
  • Elasticsearch:基于 Lucene 的搜索引擎数据库,擅长全文检索和数据分析,常用于日志分析、商品搜索、企业内部文档检索等场景。

2.Mysql出现性能差的原因?

可能是 SQL 查询使用了全表扫描,也可能是查询语句过于复杂,如多表 JOIN 或嵌套子查询。

也有可能是单表数据量过大。

锁和并发问题

通常情况下,添加索引就能解决大部分性能问题。对于一些热点数据,还可以通过增加 Redis 缓存,来减轻数据库的访问压力。

3.MySQL的内联,左外联,右外连接的区别

连接类型保留哪边的所有行?匹配不到时如何处理?结果集特点
INNER JOIN都不保留直接丢弃只保留两边都匹配上的行
LEFT JOIN保留左表所有行右表补 NULL左表全有,右表补空
RIGHT JOIN保留右表所有行左表补 NULL右表全有,左表补空

 4.为什么要有三大范式

第一范式: 列不可再分(原子性)

第二范式::非主属性必须完全依赖于主键

第三范式:非主属性不能依赖于其他的非主属性

三大范式主要是防止数据冗余 

建表需要考虑的问题?

首先需要考虑表是否符合数据库的三大范式,确保字段不可再分,消除非主键依赖,确保字段仅依赖于主键等。

然后在选择字段类型时,应该尽量选择合适的数据类型。

在字符集上,尽量选择 utf8mb4,这样不仅可以支持中文和英文,还可以支持表情符号等。

当数据量较大时,比如上千万行数据,需要考虑分表。比如订单表,可以采用水平分表的方式来分散单表存储压力。

char和varchar的区别

varchar是可变型的字符类型 char是固定长度

blob和text的区别?

blob是二进制的数据 比如图片,视频,音频等,text是用来存储文本数据

DATETIME和TIMESTAMP的区别

DATETIME 直接存储日期和时间的完整值,与时区无关。默认是null

TIMESTAMP 存储的是 Unix 时间戳,1970-01-01 00:00:01 UTC 以来的秒数,受时区影响。默认是当前的时间

in和exists的区别

in是子查询,将子查询的结果集用于外部内容,适用于结果集较小的情况 

in会有性能瓶颈,因为会建一个临时表 存储到内存中

exists会对外部每一行执行一次子查询,关注点在于子查询是否返回行 是则为ture,适用于子查询结果集比较大的情况 

null值陷

IN: 如果子查询的结果集中包含 NULL 值,可能会导致意外的结果。例如,WHERE column IN (subquery),如果 subquery 返回 NULL,则 column IN (subquery) 永远不会为真,除非 column 本身也为 NULL

EXISTS: 对 NULL 值的处理更加直接。EXISTS 只是检查子查询是否返回行,不关心行的具体值,因此不受 NULL 值的影响。

5.记录货币用什么类型比较好

DECIMAL

6.怎么存储emoji

一般用UTF-8mb4字符集

7.DROP,DELETE,TRUNCATE的区别?

DROP 是物理删除,用来删除整张表,包括表结构,且不能回滚。

DELETE 支持行级删除,可以带 WHERE 条件,可以回滚。

TRUNCATE 用于清空表中的所有数据,但会保留表结构,不能回滚。

8.UNION和UNIONALL的区别

UNION会去重 

9.一条sql的执行流程

SQL 文本↓
[连接器] 认证、维持连接↓
[查询缓存] 8.0 已废弃↓
[解析器] 拆词 → 语法树↓
[预处理器] 语义检查、权限校验↓
[优化器] 选索引、生成执行计划↓
[执行器] 调存储引擎接口↓
[存储引擎] 读磁盘 → 内存 → 返回行↓
客户端收到结果

10.mysql中bin目录下的执行文件

  • mysql:用于连接 MySQL 服务器
  • mysqldump:用于数据库备份,对数据备份、迁移或恢复时非常有用
  • mysqladmin:用来执行一些管理操作,比如说创建数据库、删除数据库、查看 MySQL 服务器的状态等。
  • mysqlcheck:用于检查、修复、分析和优化数据库表,对数据库的维护和性能优化非常有用。
  • mysqlimport:用于从文本文件中导入数据到数据库表中,适合批量数据导入。
  • mysqlshow:用于显示 MySQL 数据库服务器中的数据库、表、列等信息。
  • mysqlbinlog:用于查看 MySQL 二进制日志文件的内容,可以用于恢复数据、查看数据变更等

11.隐式数据类型转换

当一个整数和一个浮点数相加时,整数会被转换为浮点数。

SELECT 1 + 1.0; -- 结果为 2.0

当一个字符串和一个整数相加时,字符串会被转换为整数。

SELECT '1' + 1; -- 结果为 2

隐式转换会导致意想不到的结果,最好通过显式转换来规避

 

http://www.dtcms.com/a/290799.html

相关文章:

  • JVM 类加载过程笔记
  • 二维DP深度解析
  • Linux(Centos 7.6)命令详解:jobs
  • 服务器后台崩溃的原因
  • openpnp - 贴片前,矫正板子位置时,使用多个mark点的位置并不一定精确(mark点可能板厂做的位置就不准)
  • 小智ai MCP学习笔记
  • 2021 RoboCom 世界机器人开发者大赛-本科组(复赛)解题报告 | 珂学家
  • SOLIDWORK教育版实时协作打破空间限制
  • 组合设计模式
  • 笔试——Day14
  • tcp的三次握手与四次挥手
  • 手机录制视频时,硬编码和软编码哪个质量高?(硬件编码、软件编码)
  • 跨端分栏布局:从手机到Pad的优雅切换
  • 删除 XML 格式中双引号内的空格
  • odoo-059 xml中字段上写 domain 和 filter_domain 什么区别
  • 对理性决策模型的剖析及应用路径
  • vue2使用v-viewer图片预览:打开页面自动预览,禁止关闭预览,解决在微信浏览器的页面点击事件老是触发预览初始化的问题
  • OpenEuler 22.03 系统上安装配置gitlab runner
  • Linux网络编程-osi、udp
  • nextjs+react接口会请求两次?
  • react class和function 如何模拟vue中的 双向绑定 监听 computed的方式
  • macbookpro m1 max本儿上速搭一个elasticsearch+kibana环境
  • Electron 主进程与渲染进程之间交互方式
  • Spring Boot自动装配原理深度解析:从核心注解到实现机制
  • Electron使用WebAssembly实现CRC-16 原理校验
  • YModem在Android上的实现(四)
  • 自动化测试概念和时机
  • Java -- 自定义异常--Wrapper类--String类
  • MySQL表的基础操作
  • 第三章自定义检视面板_创建自定义编辑器类_编扩展默认组件的显示面板(本章进度6/9)