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

MySQL(面试篇)

目录

说一下ACID是什么?

Atomicity(原子性):

Consistency(一致性):

Isolation(隔离性):

Durability(持久性):

MySQL索引时怎样实现的?

怎么验证MySQL的索引是否满足需求?

说一下数据库的事物隔离?

说一下MySQL常用的引擎?

说一下MySQL的行锁和表锁?

说一下乐观锁和悲观锁

如何做MySQL的性能优化?


加油,一起努力 !!!

说一下ACID是什么?

Atomicity(原子性):

一个事物(transaction)中的所有操作,或者全部完成,或则全部不完成,不会结束在中间某个环节。事物在执行u工程中发生错误,会被恢复(Rollback)到事物开始前的状态,就像者个事物从来没有执行过一样。即,事物不可分割,不可约简。

Consistency(一致性):

在事物开始之前和事物结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束,触发器,级联回滚等。

Isolation(隔离性):

数据库允许多个并发事物同时对其数据进行读写和修改的能力,隔离性可以防止多个四五并发执行时由于交叉执行而导致数据的不一致。事物隔离分为不同级别,包括未提交(Readuncommitted),读提交(read committed),可重复读(repeatable read)和串行化(Serializable)。

Durability(持久性):

事物处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

MySQL索引时怎样实现的?

索引时满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从而实现高效查找数据。

具体来说MySQL中索引,不同的数据引擎实现有所不同,但目前主流的数据库引擎的索引都是B+树实现的,B+树的搜索效率,可以到达二分法的性能,找到数据区域之后就找到了完整的数据结构了,所有索引的性能也是更号的。

怎么验证MySQL的索引是否满足需求?

使用explain查看SQL是否执行查询语句的,从而分析你的索引是否满足需求。

explain语法:explain select * from table where type = 1;

说一下数据库的事物隔离?

MySQL的事物隔离是在MySQL.ini配置文件里添加的,在文件的最后添加:

transaction-icolation = REPEATABLE-READ

可用的配置值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE。

  1. READ-UNCOMMITTED:未提交读,最低隔离级别、事物未提交前、就可被其他事物读取(会出现幻读、脏读、不可重复读)。
  2. READ-COMMITTED:提交读,代价最高
  3. REPEATABLE-READ:可重复读,默认级别,保证多次读取同一个数据时,其值都和事物开始时候的内容时一致,禁止读取到别的事物未提交的数据(会照成幻读)。
  4. SERIALIZABLE:序列化,代价最高最可靠的隔离级别,该隔离级别能防止脏读,不可重复读,幻读。

脏读:表示一个事物能够读取另一个中还未提交的数据。比如某个事物尝试插入记录 A ,此时该事物还未提交,然后另一个事务尝试读取了记录A。

不可重复读:是指在一个事物内,多次读取同一数据。

幻读:指同一个事务内多次查询返回的结果集不一样。比如同一个事务A第一次查询时候有n条记录,但是第二次同等条件下查询却有n+1条记录,这就好像产生了幻觉。发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务结果集里面的数据,同一个记录的数据内容被修改了,所有数据行的记录就变多或者变少了。

说一下MySQL常用的引擎?

InnoDB:InnoDB引擎提供了对数据库acid事务的支持,并且还提供了行级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。MySQL运行的时候,InnoDB会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保持表的行数的,所以当进行 select count(*) from table 指令的时候,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所有在并发度较高的场景下使用会提升效率的。

MyIASM:MySQL的默认引擎,但不提供事务的支持,也不支持行级锁和外键,因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和InnoDB不同的时,MyIASM引擎时保存了表的行数,于是当进行select count(*) table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将MyIASM作为数据库引擎的首选。

说一下MySQL的行锁和表锁?

MyISAM只支持表锁,InnoDB支持表锁和行锁,默认为行锁。

表锁:开销小,加锁快,不会出现死锁。锁定颗粒度大,发生锁冲突的概率最高,并发量最低 。

行级锁:开销大,加锁慢,会出现死锁。锁粒度小,发生锁冲突的概率小,并发度最高。

说一下乐观锁和悲观锁

乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在提交更新的时候会判断以下在此期间别人有没有去更新这个数据。

悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻止,直到这个锁被释放。

数据库的乐观锁需要自己实现,在表里面添加一个version字段,每次修改成功值加1,这样每次修改的时候先对比一下,自己拥有的version和数据库现在version和数据库现在的version是否支持,如果不一致就不修改,这样就实现了乐观锁

如何做MySQL的性能优化?

  1. 为搜索字段创建索引
  2. 避免使用select * ,列出需要查询的字段
  3. 垂直分割分表
  4. 选择正确的存储引擎

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • ‘asyncio‘ with OpenAI API Call Hangs After Extended Run Time
  • 【AI】阿里云AI开发平台PAI:构建智能未来
  • clickhouse 原理详解
  • Spring不是引入了三级缓存,解决了循环依赖的问题吗?
  • 面试中的SEO优化:从基本概念到实用策略
  • JavaSE 面试题 46-50
  • 力扣题解(跳跃游戏II)
  • 关于linux上root连接mysql时遇到的一点小问题以及rsync通过ssh的文件同步传输以及免密码传输的实现
  • C++系列-多态的基本语法
  • 【Linux —— 生产者消费者模型】
  • 47.【C语言】指针(重难点)(J)
  • 【渗透测试】ATTCK靶场一,phpmyadmin,域渗透,内网横向移动攻略
  • Unity动画模块 之 动画层混合
  • 我要做全栈:自学前端第一天
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Android开源项目规范总结
  • Consul Config 使用Git做版本控制的实现
  • es6
  • Objective-C 中关联引用的概念
  • Phpstorm怎样批量删除空行?
  • Promise面试题,控制异步流程
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Web设计流程优化:网页效果图设计新思路
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 多线程 start 和 run 方法到底有什么区别?
  • 小试R空间处理新库sf
  • 由插件封装引出的一丢丢思考
  • 正则表达式
  • 转载:[译] 内容加速黑科技趣谈
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • #1015 : KMP算法
  • $.ajax()
  • %@ page import=%的用法
  • (2)MFC+openGL单文档框架glFrame
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (day18) leetcode 204.计数质数
  • (MATLAB)第五章-矩阵运算
  • (python)数据结构---字典
  • (三)Honghu Cloud云架构一定时调度平台
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)德国人的记事本
  • .NET CORE Aws S3 使用
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET单元测试
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • /*在DataTable中更新、删除数据*/
  • ??在JSP中,java和JavaScript如何交互?
  • @RequestMapping用法详解