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

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

相关推荐
yuyue_9991 小时前
理解 mvcc
mysql
A-刘晨阳1 小时前
从MongoDB到金仓:一次电子证照系统的平滑国产化升级实践
数据库·mongodb
瓜瓜怪兽亚1 小时前
前端基础知识---10 Node.js(三)
数据结构·数据库·node.js
掘根3 小时前
【Qt】常用控件3——显示类控件
开发语言·数据库·qt
码码哈哈爱分享3 小时前
MariaDB 与 MySQL 区别
数据库·mysql·mariadb
爱敲代码的TOM3 小时前
深入MySQL底层1-存储引擎与索引
数据库·mysql
GUIQU.3 小时前
【QT】嵌入式开发:从零开始,让硬件“活”起来的魔法之旅
java·数据库·c++·qt
sz-lcw6 小时前
MySQL知识笔记
笔记·mysql·adb
牛奶咖啡137 小时前
关系数据库MySQL的常用基础命令详解实战
数据库·mysql·本地远程连接到mysql·创建mysql用户和密码·修改mysql用户的密码·设置mysql密码的使用期限·设置和移除mysql用户的权限
ANYOLY8 小时前
Redis 面试宝典
数据库·redis·面试