数据库面试相关

python中与数据库相关的面试题 数据库作为面试中的重要部分,当然也需要整理 1.为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上,随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢,数据是存放在磁盘上的,读写速度无法和内存相比 2.如何优化 设计数据库时:数据库表、字段的设计,存储引擎,利用好MySQL自身提供的功能,如索引等 横向扩展:MySQL集群、负载均衡、读写分离 SQL语句的优化(收效甚微) ... 阅读详情

参考:https://juejin.im/post/5a9ca0d6518825555c1d1acd#heading-10

目录

1. MySQL的语句执行顺序

2. 数据库的乐观锁和悲观锁是什么?

3. SQL 约束有哪几种?(列属性-列约束)

4. 数据库锁

5. Mysql存储引擎

6. 最左匹配原则


 

1. MySQL的语句执行顺序

MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有最后一个虚拟的表才会被作为结果返回。如果没有在语句中指定某一个子句,那么将会跳过相应的步骤。

下面我们来具体分析一下查询处理的每一个阶段

  1. FORM: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1

  2. ON: 对虚表VT1进行ON筛选,只有那些符合<join-condition>的行才会被记录在虚表VT2中。
  3. JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为止。
  4. WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中。
  5. GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.
  6. CUBE | ROLLUP: 对表VT5进行cube或者rollup操作,产生表VT6.
  7. HAVING: 对虚拟表VT6应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT7中。
  8. SELECT: 执行select操作,选择指定的列,插入到虚拟表VT8中。
  9. DISTINCT: 对VT8中的记录进行去重。产生虚拟表VT9.
  10. ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10.
  11. LIMIT:取出指定行的记录,产生虚拟表VT11, 并将结果返回。

转自:https://www.cnblogs.com/rollenholt/p/3776923.html

 

2. 数据库的乐观锁和悲观锁是什么?

数据的锁定分为两种,第一种叫作悲观锁,第二种叫作乐观锁。

  1. 悲观锁:在多个事务同时存取数据库中同一数据时,对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住。【数据锁定:数据将暂时不会得到修改】
  2. 乐观锁:认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让用户返回错误的信息。让用户决定如何去做。

实现:

一、悲观锁
    1、排它锁,当事务在操作数据时把这部分数据进行锁定,直到操作完毕后再解锁,其他事务操作才可操作该部分数据。这将防止其他进程读取或修改表中的数据。
    2、实现:大多数情况下依靠数据库的锁机制实现

     一般使用 select ...for update 对所选择的数据进行加锁处理,例如select * from account where name=”Max” for update, 这条sql 语句锁定了account 表中所有符合检索条件(name=”Max”)的记录。本次事务提交之前(事务提交时会释放事务过程中的锁),外界无法修改这些记录。

二、乐观锁
    1、如果有人在你之前更新了,你的更新应当是被拒绝的,可以让用户重新操作。
    2、实现:使用version版本或者时间戳

     具体可通过给表加一个版本号或时间戳字段实现,当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断当前版本信息与第一次取出来的版本值大小,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据,拒绝更新,让用户重新操作。

 

3. SQL 约束有哪几种?(列属性-列约束)

  1. PRIMARY KEY: 能唯一标识记录的字段,可以作为主键,在一个表只允许出现一个。
  2. UNIQUE: 控件字段内容不能重复,一个表允许有多个 Unique 约束。
  3. NULL:null不是数据类型,是列的一个属性。表示当前列是否可以为null,表示什么都没有。
    • null, 允许为空。默认。
    • not null, 不允许为空。
  4. DEFAULT:默认值属性
  5. AUTO_INCREMENT:自动增长约束
  6. COMMENT:注释
  7. FOREIGN KEY: 用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

4. 数据库锁

参看:数据库两大神器【索引和锁】

 

  • 表锁
    • 开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低
  • 行锁
    • 开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高

不同的存储引擎支持的锁粒度是不一样的:

  • InnoDB:行锁和表锁都支持!

InnoDB只有通过索引条件检索数据才使用行级锁,否则,InnoDB将使用表锁

也就是说,InnoDB的行锁是基于索引的!

  • MyISAM:只支持表锁!

表锁

表锁下又分为两种模式:

  • 表读锁(Table Read Lock)
  • 表写锁(Table Write Lock)

在表读锁和表写锁的环境下:读读不阻塞,读写阻塞,写写阻塞!

  • 读读不阻塞:当前用户在读数据,其他的用户也在读数据,不会加锁
  • 读写阻塞:当前用户在读数据,其他的用户不能修改当前用户读的数据,会加锁!
  • 写写阻塞:当前用户在修改数据,其他的用户不能修改当前用户正在修改的数据,会加锁!

行锁:

我们使用Mysql一般是使用InnoDB存储引擎的。InnoDB和MyISAM有两个本质的区别:

  • InnoDB支持行锁
  • InnoDB支持事务

从上面也说了:我们是很少手动加表锁的。表锁对我们程序员来说几乎是透明的,即使InnoDB不走索引,加的表锁也是自动的!

InnoDB实现了以下两种类型的行锁。

  • 共享锁(S锁):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。
    • 也叫做读锁:读锁是共享的,多个客户可以同时读取同一个资源,但不允许其他客户修改。
  • 排他锁(X锁):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。
    • 也叫做写锁:写锁是排他的,写锁会阻塞其他的写锁和读锁。

为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁:

  • 意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。
  • 意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。
  • 意向锁也是数据库隐式帮我们做了,不需要程序员操心!

 

5. Mysql存储引擎

常用的存储引擎有以下:

  • Innodb引擎,Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。
  • MyIASM引擎(原本Mysql的默认引擎),不提供事务的支持,也不支持行级锁和外键。

同一个数据库也可以使用多种存储引擎的表。如果一个表修改要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。

 

6. 最左匹配原则

1.简单说下什么是最左匹配原则

顾名思义:最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会停止匹配(不实用索引)。

例如:b = 2 如果建立(a,b)顺序的索引,是匹配不到(a,b)索引的;但是如果查询条件是a = 1 and b = 2或者a=1(又或者是b = 2 and b = 1)就可以,因为优化器会自动调整a,b的顺序。再比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,因为c字段是一个范围查询,它之后的字段会停止匹配。

2.最左匹配原则的原理

最左匹配原则都是针对联合索引来说的,所以我们有必要了解一下联合索引的原理。了解了联合索引,那么为什么会有最左匹配原则这种说法也就理解了。

我们都知道索引的底层是一颗B+树,那么联合索引当然还是一颗B+树,只不过联合索引的健值数量不是一个,而是多个。构建一颗B+树只能根据一个值来构建,因此数据库依据联合索引最左的字段来构建B+树。

例子:假如创建一个(a,b)的联合索引,那么它的索引树是这样的


可以看到a的值是有顺序的,1,1,2,2,3,3,而b的值是没有顺序的1,2,1,4,1,2。所以b = 2这种查询条件没有办法利用索引,因为联合索引首先是按a排序的,b是无序的。

同时我们还可以发现在a值相等的情况下,b值又是按顺序排列的,但是这种顺序是相对的。所以最左匹配原则遇上范围查询就会停止,剩下的字段都无法使用索引。例如a = 1 and b = 2 a,b字段都可以使用索引,因为在a值确定的情况下b是相对有序的,而a>1and b=2,a字段可以匹配上索引,但b值不可以,因为a的值是一个范围,在这个范围中b是无序的。

 

7. Mysql实现full join

è¿éåå¾çæè¿°

oracle里面有full join,但是在mysql中没有full join。我们可以使用union来达到目的。

mysql> select * from t1 left join t2 on t1.id = t2.id
    -> union 
    -> select * from t1 right join t2 on t1.id = t2.id;

è¿éåå¾çæè¿°

数据仓库面试题集锦(附答案和数仓知识体系) 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。1)数据仓库是用于支持决策、面向分析型数据处理;2)对多个异构的数据源有效集成,集成后按照主题进行重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改2、数据仓库和数据库的区别?从目标、用途、设计来说1)数据库是面向事务处理的,数据是由日常的业务产生的,并且是频繁更新的;数据仓库是面向主题的,数据来源多样化,经过一定的规则转换得到的,用于分析和决策2)数据库一般用来存储当前事务性数据,如交易数据; 阅读详情

相关推荐

数据库优化相关面试题

1、如何设计一个高并发的系统 数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引的优化 使用缓存,尽量减少数据库 IO 分布式数据库、分布式缓存 服务器的负载均衡   2、实践中如何优化MySQL 四条从效果上第一条影响最大,后面越来越小。 SQL语句及索引的优化 数据库表结构的优化 系统配置的优化 硬件的优化   3、锁的优化策略 读写分离 分段加锁 减少锁持...

专注Java面试整理 2万+

mysql数据库相关面试题_20个MySQL-DB相关的经典面试题

本文主要向大家介绍了20个MySQL中DB相关的经典面试题,通过具体的实例让大家了解,希望对大家学习MySQL有所帮助。1、MySQL的复制原理以及流程基本原理流程,3个线程以及之间的关联;2、MySQL中myisam与innodb的区别,至少5点(1)、问5点不同;(2)、innodb引擎的4大特性(3)、2者selectcount(*)哪个更快,为什么3、MySQL中varchar与char的...

weixin_39890633的博客 220

Python面试宝典:Python中与数据库连接和操作相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

python中关于数据库连接和操作相关的知识和面试笔试题

今晚打老虎的专栏 504

python面试问技术栈_Python面试综合--DB相关

Python面试综合--DB相关关系型数据库:MySQL,Oracle,Postgrel, MariaDB, SQL Server等优点易用性:都是使用表结构,格式一致,支持sql语言支持复杂查询:多表连表查询缺点读写性能较差,海量数据时瓶颈出现灵活度不高高并发情况下硬盘IO出现瓶颈非关系型数据库(Not Only SQL):Redis,Memcached, MongoDB, Hbase等优点格式...

weixin_39980353的博客 170

数据仓库方法论与相关面试题

数据仓库的概念最早是由美国著名的信息工程专家 William Inmon 博士在 1991 年提出,他的出现是因为数据量达到一定的程度,传统数据库的数据处理方案已无法支持方便地对海量数据直接做分析和处理。数据仓库对数据集合的定义是面向主题的、集成的、稳定的和随时间变化的,刚好弥补了数据库在 OLAP 方面的不足。值得说明的是,数据仓库是一个数据分析处理过程,或者说是一套数据处理的方法论,而不仅仅是一个数据存储软件或产品,大数据的工作很多都是基于数据仓库展开的,所以数据仓库方法论是除了大数据底层技术之外非常重

qq_39712666的博客 439

嵌入式:简单的service框架

在嵌入式中,我们获取一个资源、设置一个变量、更新数据的话最直接的方式就是直接调用一个函数。这样的写法也可以满足基本的功能,前提是这个系统是只要一个任务,只有一个while(1)如图1.1。图1.1当有两个或者两个以上的任务的时候,同时调用一个函数(设置一个状态值、操作同一个资源、操作指针等行为)的流程如图1.2。图1.2当两个任务同时操作一个资源的时候,就会有重入的问题,会导致想不到的异常问题(数据不对、指针异常等)。

stupid的博客 986

python中db是什么意思_Python面试-DB相关

昨日回顾:面试Python综述设计哲学版本变迁及发展GIL内存管理及垃圾回收并发并行昨日作业一:Python是否存在内存泄露作业二:过往的项目中有没有出现过性能问题?作业三:什么是协程?一、数据库今天的主要内容集中在面试过程中的数据库部分;互联网公司Python相关岗位面试中大多数会有数据库相关的面试问题。大家认为什么是数据库呢?数据库简而言之是一种电子化的文件柜,用户可以对文件中的数据进行增删改...

weixin_39573512的博客 1817

手把手教你用BQ Studio给BQ40Z50电量计“做体检”:从Golden Learning到精度验证的全流程实操

本文详细介绍了如何使用BQ Studio对BQ40Z50电量计进行全流程调试,从Golden Learning到精度验证。通过硬件连接、参数配置和优化技巧,帮助工程师提升电池管理系统的精度和性能,适用于BMS开发和电量计校准的实际应用场景。

weixin_30824599的博客 450

数据仓库相关面试题

数据仓库相关面试题

u011868279的博客 2933

TSmaster CANFD配置避坑指南:为什么你的PCAN盒不支持最新版本?

本文针对TSmaster配置PCAN硬件进行CANFD通信时的常见问题,提供了详细的避坑指南。重点解析了CANFD配置中TSEG1等关键参数的理解误区,并深入探讨了TSmaster新版本与PCAN硬件驱动之间的兼容性变化,帮助工程师快速定位并解决连接失败或无法发送CANFD报文等问题。

alpha的博客 542

西门子精致面板TP1200 历史数据(历史数据、审计追踪) 移存到网络路径

TP1200 审计追踪

zhang080602的博客 5770

【数据库】19道DB相关面试概念题

1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; mysql的bi

qqqqq1993qqqqq的博客 516

线性代数-第24篇:线性代数在控制系统中的核心应用

线性代数通过状态空间建模、矩阵分解与优化算法,为控制系统提供了从理论分析到工程实现的完整框架。从传统PID控制到现代智能控制,其应用贯穿系统设计、分析与优化的全流程。未来,随着多智能体协同控制、量子控制系统等前沿领域的发展,线性代数将在高维矩阵计算、分布式优化等方向持续创新,为复杂控制系统的突破提供核心支撑。如果对线性代数在控制系统中的应用细节有疑问,欢迎在评论区留言!

无 424

数据库相关的面试题

答案:关系型数据库是基于关系模型的数据库,使用表格(表)来组织和存储数据,具有固定的模式和预定义的结构,如MySQL、Oracle、SQL Server等。索引可以提高数据库的查询性能,但会占用额外的存储空间,并在插入、更新和删除数据时增加了一定的开销。请注意,不同的数据库管理系统可能会有不同的索引类型和命名方式,上述列举的索引类型是常见的但不一定适用于所有数据库。答:数据库范式化是将数据库设计中的表结构按照一定的规范进行拆分和优化,以减少数据冗余和提高数据一致性。请列举一些常见的数据库索引类型。

Angel_2020的博客 642

2、系统建模、状态估计与故障诊断中的滤波设计与故障诊断方法

本文综述了系统建模、状态估计与故障诊断中的滤波设计与故障诊断方法。首先介绍了基于分析模型、知识和信号处理的三类故障诊断方法及其特点;随后总结了传统滤波方法(如维纳滤波、卡尔曼滤波)与非概率的集员滤波方法,重点阐述了在未知但有界噪声假设下的椭球、立方、多面体、区间和Zonotope等集员滤波算法原理与发展。文章还展示了各类集员滤波算法的应用实例与流程图,并对比了其计算复杂性与准确性。最后指出,根据不同系统特性选择合适的故障诊断与滤波方法至关重要,未来趋势将趋向于多方法融合与实际工程应用深化。

kmeans3miner的博客 137

史上最全工商银行核心系统建设历程:从“数据集中”到“ECOS”2.0,见证银行业信息科技跨时代发展征程

ECOS工程的直接成果是建成了工商银行第五代信息系统,即从单一核心银行系统到去核心化开放生态系统,率先开启了以智能化、开放化为特征,数据驱动引领经营模式变革,创新提出了一整套国际领先的分布式开放生态银行系统建设方案,在大型银行全分布式系统架构、主机下移、银行系统生态化转型、大规模交易型分布式数据库等多个领域再次实现“0到1”的突破,建成了具备国际领先水平的全分布式开放生态银行系统,继续勇立数字化转型潮头,推动高质量发展再上新台阶。工商银行的业务连续性管理水平实现了跨越式发展,有力地保障了业务发展。

银行信息系统应用架构详解 824

(面试)数据库相关面试题

关于数据库秋招的最新面试题,希望可以帮助到大家,也希望各位大佬提出不足,我也会继续学习,继续加油

m0_69078476的博客 434

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.6 在kernel 中实现系统复位和系统关机驱动

上一章节`Qemu`篇我们已经实现了我们`SOC`的`power reset`和 `power down` 寄存器,本章节我们就在`Linux driver`中去实现它

DSMGUOGUO的博客 542

数据库概念相关面试题

上海一九四三 315

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数据库的索引知识以及常见相关面试题

什么是索引? 数据库索引是一种数据结构,用于快速查找数据库表中的特定数据。它类似于书籍的目录,可以加快数据检索速度。索引是数据库优化的重要手段之一,它可以帮助数据库系统高效地定位到需要的数据行,从而提升查询效率。

伤心的辣条 798

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

面试八股文:数据库相关

常见数据库面试总结

weixin_43479465的博客 1179

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

关于数据仓库工程师的一般面试题目

 原创于2007年11月06日,2009年10月15日迁移至此。 相信会对即将投身于数据仓库事业中的同行们有点帮助!不过这只是针对初级数据仓库工程师的基本问题。本题只代表自己对数据仓库的肤浅认识,不代表任何公司的面试题目。对于高级数据仓库工程师的问题更侧重于各种工具的细枝末节。对于数据仓库架构师的问题更侧重于数据仓库的架构和总体认识。对于数据仓库项目经理的问

不胜人生一场醉 1万+

数据库操作语句及面试相关数据库-Java基础

1、复杂数据库操作 转载:https://www.cnblogs.com/xyzyj/p/10522664.html 2、基本数据库操作 转载:https://blog.youkuaiyun.com/apt1203jn/article/details/80217967 3 、面试数据库总结 转载:https://blog.youkuaiyun.com/qq_41913882/article/details/87...

洋葱专栏-有灵魂的程序员 184

Python面试综合--DB相关

Python面试综合--DB相关 关系型数据库:MySQL,Oracle,Postgrel, MariaDB, SQL Server等 优点 易用性:都是使用表结构,格式一致,支持sql语言 支持复杂查询:多表连表查询 缺点 读写性能较差,海量数据时瓶颈出现 灵活度不高 高并发情况下硬盘IO出现瓶颈 非关系型数据库(Not Only SQL):Redis,Memcached, Mong...

weixin_30670925的博客 124

数据库相关知识-----JAVA面试

数据库相关知识-----JAVA面试 Mysql架构(索引 事务 锁)InnoDB 索引文件跟数据文件放在同一个文件中的 有事务 默认行锁也支持表锁 锁的索引 没有索引只能是表级锁 支持外键Myisam在不同文件 没有事务 默认支持表锁 不支持外键连接器:springboot集成的Hecir 独特的特点不 Druide阿里的连接器分析器:sql字符串----》 AST树 抽象语法树 优化器: 原则CBO:基于成本发优化(基本) RBO基于规则的优化执行器:bi

weixin_44626778的博客 56

【Java超高频面试题&数据库优化&mybatis】数据库优化和mybatis相关高频面试题汇总

本期文章将汇总数据库优化和mybatis相关的高频面试题,给最近需要找工作的朋友们总结一波,帮助大家全面掌握数据库和mybatis的核心知识点,提升竞争力,为你的面试之旅保驾护航!

longshehui的博客 1251
上一篇: Spring---消息
下一篇: SpringBoot---WebMvcConfigurer详解
zhangpower1993
博客等级 码龄11年 100粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值