MySQL详解(一)

1.关系数据库和非关系数据库?

关系数据库基于表格方式存储,可以通过SQL语句进行查询内容,支持事务ACID特性,优点:保持数据一致性、支持复杂查询、数据开销消耗小,缺点:处理非结构化数据能力弱

非关系数据库基于键值对方式存储,支持多种数据模型,优点:读写效率高(key-value),缺点:查询能力弱(无SQL语句),一致性差

在现代中,通常将两者结合使用,发挥各自优势

2.索引

索引是表中一种特殊数据结构,通常是每一行唯一性标志,作用:可以加快检索速度,方便排序,便于表快速连接,缺点:增大存储空间消耗,插入、删除等操作都需要维护索引,降低读写效率

3.一条SQL语句执行过程

客户端发送一条请求时,连接器进行身份验证,接下来在缓冲中查找,如果找到结果就返回,否则将SQL语句放入分析器中进行字词分析,再在优化器中进行优化,最后调用执行器在搜索引擎中查找相应的内容返回

补充:

MySQL结构组成:

由服务层(连接器、分析器、优化器、执行器,查询缓冲组成)和 存储引擎(储存数据和提取数据)组成

4.drop/truncate/delete区别

drop:将整个表删除,在事务中是无法回滚的

truncate:将表中数据全部删除,索引、自增id等恢复初始化,无法回滚

delete:删除表中具体某行时使用,在事务中会被以日志方式记录,因此可以回滚

总而言之:想删除表结构用drop,删除表内容保留表结构用truncate,只删除表内容用delete

5.MySQL优化方向

查询使用select时,减少select * 的使用

选择合适的搜素引擎

创建索引

6.数据库隔离级别

出现在数据库并发控制情况下

分为以下四种:
未提交读:事务发生修改,未提交其他人使用事务时也能看到修改后的结果,因此会出现脏读、不可重复读以及幻读情况

提交读:事务发生修改,在提交前其他人调用事务都是不可见的,阻止了脏读情况,但是还有不可重复读和幻读情况

可重复读:一个事务多次多次读取结果相同,阻止脏读和不可重复读,还存在幻读情况

可串行化读:并发读取和串行化读取一样,可以阻止脏读、不可重复读以及幻读情况

补充:

脏读:事务A读取了事务B修改但未提交的数据,如果事务B回滚,事务A读取的就是无效数据

不可重复读:事务A多次读取同一数据,期间事务B修改并提交了该数据,导致事务A前后读取结果不一致

幻读:事务A多次按相同条件查询,期间事务B插入或删除了符合该条件的记录并提交,导致事务A看到"幻影行"

(图片取自阿秀)

7.数据引擎InnoDB与MyISAM对比

InnoDB是事务型储存引擎,也是MySQL默认的数据引擎,其支持四个隔离特性:未提交读、提交读、可重复读和可串行化读,默认是可重复读,通过MVCC+间隙锁来解决幻读问题,存在聚簇索引,提高查询效率,支持在线热备份,其他引擎不支持该特性,原因是因为要获取一致性需要停止对所有表的写入,而在混合使用场景中,停止写入也意味着停止读取

MyISAM提供许多特性:压缩表、空间数据索引等,不支持事务,不支持行级锁,只支持表级锁,读取加共享锁,写入加排他锁

8.幻读与不可重复读区别

不可重复读原因是数据的修改,例如:A在读取自己工资时为1000元,在其读取过程中,B将其工资改为1500元,当A再次读取发现工资变了,这就是不可重复读

幻读原因通常是数据删除或插入,例如:A在读取班上人数是为50人,在其读取过程中,B进入该班,A再次读取发现人数为51人,这就是幻读

最后,感谢你的支持!!!

相关推荐
松涛和鸣10 小时前
DAY69 Practical Guide to Linux Character Device Drivers
linux·服务器·arm开发·数据库·单片机·嵌入式硬件
咩咩不吃草10 小时前
Linux环境下MySQL的安装与使用与Navicat
linux·运维·数据库·mysql·navicat
Aloudata10 小时前
NoETL 指标平台如何保障亿级明细查询的秒级响应?——Aloudata CAN 性能压测深度解析
数据库·数据分析·自动化·指标平台
maoku6610 小时前
从关键词到语义:向量数据库如何让AI真正理解你的需求
数据库·人工智能
寻道码路10 小时前
【MCP探索实践】Google GenAI Toolbox:Google开源的企业级AI数据库中间件、5分钟搞定LLM-SQL安全互联
数据库·人工智能·sql·开源·aigc
数据知道10 小时前
PostgreSQL 核心原理:一文掌握 WAL 缓冲区与刷盘策略(性能与数据安全的权衡)
数据库·postgresql
三个人工作室10 小时前
mysql允许所有ip地址访问,mysql允许该用户访问自己的数据库【伸手党福利】
数据库·tcp/ip·mysql
小小逐月者10 小时前
SQLModel 开发笔记:Python SQL 数据库操作的「简化神器」
数据库·笔记·python
QQ828929QQ10 小时前
MySQL Explain 分析 SQL 执行计划
数据库·sql·mysql
我是小超人-雨石花10 小时前
postgresql + postgis安装
数据库·postgresql·postgis·空间数据库