每日一问-常见MySQL面试问题3

2.一致性(数据库总是从一种一致状态变化到另一种一致状态)

3.在并发事务的情况下,该事务不能与其他事务(事务)冲突

4.持久性(事务一旦提交成功,其对数据的改变就永久保存在数据库中)

也就是我们常说的事务是ACID的,保证事务中数据的正确性。

18道经典MySQL面试题

MySQL是一个开源关系数据管理系统,用于访问、查询、更新和管理数据。
说到存储层,就不得不说到数据库。
数据库熟练程度也是软件测试工程师面试所需的知识点之一。
我们为大家准备了一些经典的MySQL数据库面试题,大家可以参考学习。
1.用一句话介绍一下什么是MySQL?MySQL是一个开源关系数据管理系统,用于访问、查询、更新和管理数据。
2、MySQL数据库重复数据删除的关键字有哪些?selectdistinctfieldnamefromtablename数据库自带的distinct关键字,用于过滤多余的重复记录,只保留一条。
3、MySQL多表连接方式有哪些?左连接、右连接、内连接。
用法:左连接:select*fromALEFTJOINBonA.id=B.id;右连接:select*fromARIGHTJOINBonA.id=B.id;内连接:select*fromAinnerjoinBona.xx=b.xx;4、MySQL数据库和Redis有什么区别?MySQL和Redis都可以存储数据,但是MySQL中的数据是永久的,而Redis中的数据是缓存的,有缓存机制。
当新数据到达时,根据缓存机制,旧数据将失效。
但从Redis读取数据更快更方便,而MySQL逻辑复杂,数据量大,读取数据耗时较长。
5.告诉我索引的优点和缺点?好处:提高查询效率,减少数据访问时间。
缺点:占用存储空间,增加数据插入和删除时间。
6.什么是死胡同?怎么解决呢?锁定是指两个或多个事务相互操作同一资源并请求锁定对方的资源,从而造成恶性循环的现象。
解决方案:使用事务隔离级别,避免使用阻塞资源,并使用死锁检测和恢复机制。
7.什么是视图?为什么要使用视图?视图是一个虚拟表,它允许您在经过一些过滤后显示表中的数据。
为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了显示功能。
8.视图有什么特点?使用场景有哪些?展示特点:简化SQL查询,提高开发效率,兼容遗留表结构。
常见视图使用场景:简化复杂的SQL查询、保护敏感数据、共享数据视图。
9.请告诉我一些观点的优点和缺点?视图的好处:简化查询、保护数据安全、提高数据可重用性。
缺点:可能影响性能,对视图的编辑操作有限。
10.MySQL有哪些限制?MySQL约束包括:主键约束、外键约束、唯一约束、非零约束、默认值和检查约束。
11、UNION和UNIONALL有什么区别?UNION将删除重复行,UNIONALL将不会删除重复行。
12.您是否曾担心企业系统中繁琐的SQL时间?您如何针对慢速查询进行优化?特别关注优化方法,包括:执行计划的分析、索引的改进、SQL语句的优化、缓存的利用以及数据库连接数的减少。
13、主键应该使用自增ID还是UUID?如果是单机环境,建议使用自增ID,存储空间小,查询效率高;如果是分布式系统,建议使用UUID,虽然可以避免冲突。
占用空间大,插入数据速度慢。
14、MySQL数据库CPU增加怎么办?排查过程:使用top命令观察判断是mysqld导致的还是其他原因。
如果这是由mysqld引起的,请使用showprocesslist检查会话状态并确定是否正在运行任何资源密集型SQL。
发现高强度的SQL语句,看执行计划是否准确、索引是否缺失、数据量是否过大。
15.什么是存储过程?存储过程是经过编译的SQL语句,用于实现某些功能。
好处:提高代码的可重用性、提高执行效率、提供安全性和事务处理能力。
缺点:维护和调试相对困难。
16.您在日常工作中如何优化SQL?这个问题可以从以下几个维度来回答:优化SQL语句、使用合适的数据类型、创建合适的索引、合适地使用事务、使用缓存、减少数据量。
17、什么情况下不应该创建索引,或者少创建索引?当数据量较小、数据更新频繁、查询条件复杂时,需要创建的索引较少或不创建。
18.你了解什么是表分区吗?表分区是指根据一定的规则将数据库中的表分解为更小、更易于管理的部分。
好处包括:提高查询效率、减少磁盘空间、提高数据安全性和简化数据管理。

「春招系列」MySQL面试核心25问(附答案)

由于篇幅限制,本文只写25道MySQL题。
Redis、SSM框架、算法、计算网络等其他技术栈的面试题后续会持续更新。
我整理的1000多篇采访八篇文章将放在文章最后。
它对所有人免费。
最近面试过,需要回答问题的同学可以直接翻到文章最后获取。

服务层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖了MySQL的大部分核心服务功能,以及所有内置函数(如日期、时间、数学和数学)加密函数等),所有跨存储引擎的功能都在这一层实现,如存储过程、触发器、视图等。

Delete用于删除数据行中的全部或部分桌子。
执行Delete后,用户需要提交或回滚来执行删除或取消删除,这将触发表上的所有删除。
扳机。

截断删除表中的所有数据。
该操作无法回滚,也不会触发该表上的触发器。
截断比删除更快并且占用的空间更少。

Drop命令从数据库中删除表。
所有数据行、索引和权限也将被删除。
所有DML触发器都不会被触发,并且该命令无法回滚。

MySQLInnoDB存储引擎默认支持的隔离级别是REPEATABLE-READ(可重复读取)

这里需要注意的是,与SQL标准的区别在于,InnoDB存储引擎处于可重复读取状态。
READ(可重读)事务隔离级别采用Next-KeyLock锁算法,因此可以避免幻读的发生,这一点与其他数据库系统(如SQLServer)不同。
因此,InnoDB存储引擎默认支持的隔离级别是REPEATABLE-READ(可重复读取),可以充分保证事务的隔离要求,即达到了SQL标准的SERIALIZABLE(可串行化)隔离级别。

因为隔离级别越低,事务请求的锁就越少,所以大多数数据库系统的隔离级别都是READ-COMMITTED(读取提交的内容):,但是你需要知道的是InnoDB存储引擎默认情况下使用REPEATABLE-READ不会造成性能损失。

脏读:第一个修改事务和读事务进行时,读事务读到的数据是100,是修改后的数据,但随后事务满足一致性等特点如果执行回滚操作,读取事务的结果将是脏数据。

幻读:一般T1在一定范围内进行修改操作(添加或删除),T2读取该范围,导致读取到的数据处于修改之间,强调范围。

丢弃修改:两个写事务T1和T2同时对A=0执行增量操作。
结果T2覆盖了T1,导致最终结果是1而不是2,事务被覆盖

不可重复读:T2读取了一条数据,然后T1修改了该数据。
如果T2再次读取该数据,此时读取的结果与第一次读取的结果不同。

通过分表,可以减轻数据库中单个表的负担,并将压力分散到不同的表上。
同时,由于不同表的数据量减少,可以提高查询性能,缩短查询时间。
另外,它可以大大缓解表锁问题。
分表策略可以概括为垂直分表和水平分表:

水平分表:模数分表属于随机表分裂,而时间维度表分裂属于连续表分裂。
如何设计垂直拆分,我的建议:将不常用的字段拆分到另一个扩展表中。
将文本较大的字段单独拆分到另一个扩展表中,将不经常修改的字段放在同一个表中,将经常更改的字段放在另一张表中。
对于用户量较大的场景,可以考虑取模、分表。
数据会比较均匀,不容易出现热点和并发访问瓶颈。

数据库中的分表只是解决了单表数据过大的问题,但并没有将单表数据分散到不同的物理机上。
因此,并不能减轻MySQL服务器的压力。
它仍然存在。
同一台物理机上的资源竞争和瓶颈,包括CPU、内存、磁盘IO、网络带宽等。

分库分表带来的分布式困境及对策。
数据迁移和扩容问题——一般的做法是通过程序读取数据,然后按照指定的分表策略进行处理。
数据写入各个子表。
分页和排序问题——数据需要在不同的子表中排序返回,不同子表返回的结果集再次汇总排序,最后返回给用户。

示例: