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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值