MySQL详解(一)

发布于:2025-08-05 ⋅ 阅读:(16) ⋅ 点赞:(0)

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人,这就是幻读

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


网站公告

今日签到

点亮在社区的每一天
去签到