C++岗位求职面试八股文第十八篇(数据库) 您所在的位置:网站首页 mysql日期能建立索引吗怎么设置 C++岗位求职面试八股文第十八篇(数据库)

C++岗位求职面试八股文第十八篇(数据库)

2023-06-15 13:34| 来源: 网络整理| 查看: 265

系列文章目录

第一篇:语言基础 第二篇:设计模式 第三篇:数据库 第四篇:计算机网络 第五篇:操作系统 第六篇:LInux 第七篇:数据结构 第八篇:智力题

[21]表跟表是怎么关联的

内连接、外连接

内连接: 内连接通过INNER JOIN来实现,它将返回两张表中满足连接条件的数据,不满足条件的数据不会查询出来。

外连接: 外连接通过OUTER JOIN来实现,它会返回两张表中满足连接条件的数据,同时返回不满足连接条件的数据。外连接有两种形式:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)。

左外连接:可以简称为左连接(LEFT JOIN),它会返回左表中的所有记录和右表中满足连接条件的记录。

右外连接:可以简称为右连接(RIGHT JOIN),它会返回右表中的所有记录和左表中满足连接条件的记录。

在这里插入图片描述 等值连接。这种连接是通过WHERE子句中的条件,将两张表连接在一起,它的实际效果等同于内连接。出于语义清晰的考虑,一般更建议使用内连接,而不是等值连接。

[22]SQL注入

SQL注入的原理是一种常见的web安全漏洞,将SQL代码伪装到输入参数中,传递到服务器解析并执行的一种攻击手法。攻击者将恶意SQL代码插入数据库查询,SQL服务器将其作为正常的代码读取,有应用程序漏洞的数据库将被攻击甚至被控制,攻击者使用SQL注入漏洞可以绕开应用程序的安全保护措施,进而达到增删改查的目的。也就是说,在一些对SERVER端发起的请求参数中植入一些SQL代码,SERVER端在执行SQL操作时,会拼接对应参数,同时也将一些SQL注入攻击的“SQL”拼接起来,导致会执行一些预期之外的操作。

登录功能,其登录界面包括用户名和密码输入框以及提交按钮,登录时需要输入用户名和密码,然后提交。此时调用接口/user/login/ 加上参数username、password,首先连接数据库,然后 后台对请求参数中携带的用户名、密码进行参数校验,即SQL的查询过程。假设正确的用户名和密码为ls和123456,输入正确的用户名和密码、提交,相当于调用了以下的SQL语句。 SELECT * FROM user WHERE username = ‘ls’ AND password = ‘123456’

SQL注入漏洞的影响 SQL注入攻击可以释放敏感客户数据列表信息,而数据原本就是数据库最重要的东西,其中损失不可估量。

[23]如何解决SQL注入

严格的参数校验 参数校验就没得说了,在一些不该有特殊字符的参数中提前进行特殊字符校验即可。

SQL预编译 在知道了SQL注入的原理之后,我们同样也了解到MySQL有预编译的功能,指的是在服务器启动时,MySQL Client把SQL语句的模板(变量采用占位符进行占位)发送给MySQL服务器,MySQL服务器对SQL语句的模板进行编译,编译之后根据语句的优化分析对相应的索引进行优化,在最终绑定参数时把相应的参数传送给MySQL服务器,直接进行执行,节省了SQL查询时间,以及MySQL服务器的资源,达到一次编译、多次执行的目的,除此之外,还可以防止SQL注入。 具体是怎样防止SQL注入的呢?实际上当将绑定的参数传到MySQL服务器,MySQL服务器对参数进行编译,即填充到相应的占位符的过程中,做了转义操作。我们常用的JDBC就有预编译功能,不仅提升性能,而且防止SQL注入。

[24]六大数据库攻击

1.强力(或非强力)破解弱口令或默认的用户名及口令

2.特权提升 一个用户被错误地授与了超过其实际需要用来完成工作的、对数据库及其相关应用程序的访问和特权 特权提升方法: udf 提权、写入启动文件、

3.利用未用的和不需要的数据库服务和和功能中的漏洞

4.针对未打补丁的数据库漏洞

5.SQL注入

6.窃取备份(未加密)的磁带 链接

[25]SQL安全漏洞攻击 会话劫持中间人攻击跨站点脚本攻击XSS 点击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息SQL注入 [26]left join on mysql_mysql中left join设置条件在on与where时的区别

在这里插入图片描述

[27]将一张表的部分数据更新到另一张表,该如何操作呢?

采用关联更新的方式,将一张表的部分数据,更新到另一张表内 update b set b.col=a.col from a,b where a.id=b.id; update b set col=a.col from b inner join a on a.id=b.id; update b set b.col=a.col from b left Join a on b.id = a.id;

[28] WHERE和HAVING有什么区别

WHERE是一个约束声明,使用WHERE约束来自数据库的数据,WHERE是在结果返回之前起作用的,WHERE中不能使用聚合函数。 HAVING是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在HAVING中可以使用聚合函数。另一方面,HAVING子句中不能使用除了分组字段和聚合函数之外的其他字段。 从性能的角度来说,HAVING子句中如果使用了分组字段作为过滤条件,应该替换成WHERE子句。因为WHERE可以在执行分组操作和计算聚合函数之前过滤掉不需要的数据,性能会更好。

Where 。。。。group by。。。。。having。。。。。

[29]为什么建立索引

在最频繁使⽤的、⽤以缩⼩查询范围的字段,需要排序的字段上建⽴索引 不宜: 1. 对于查询中很少涉及的列或者᯿复值⽐较多的列 2. 对于⼀些特殊的数据类型,不宜建⽴索引,⽐如⽂本字段(text)等

[30]对MySQL索引的理解

链接 在这里插入图片描述 在这里插入图片描述

[31]聚簇索引=主键索引吗?

聚簇索引:数据按照索引顺序进行存储

聚簇索引并不完全等于主键索引,因为一张表从结构上来讲,可以没有主键(索引),如果没有主键(索引),那么聚簇索引就不再是主键索引了。 在这里插入图片描述 索引是一个单独的、存储在磁盘上的数据库结构,包含着对数据表里所有记录的引用指针。使用索引可以快速找出在某个或多个列中有一特定值的行,所有MySQL列类型都可以被索引,对相关列使用索引是提高查询操作速度的最佳途径。

索引是在存储引擎中实现的,因此,每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型。MySQL中索引的存储类型有两种,即BTREE和HASH,具体和表的存储引擎相关。MyISAM和InnoDB存储引擎只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。

索引的优点主要有以下几条: 通过创建唯一索引,可以保证数据库表中每一行数据的唯一性。 可以大大加快数据的查询速度,这也是创建索引的主要原因。 在实现数据的参考完整性方面,可以加速表和表之间的连接。 在使用分组和排序子句进行数据查询时,也可以显著减少查询中分组和排序的时间。

增加索引也有许多不利的方面,主要表现在如下几个方面: 创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加。 索引需要占磁盘空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。 当对表中的数据进行增加、删除和修改的时候,索引也要动态地维护,这样就降低了数据的维护速度。

[32]MySQL的索引可以分为以下几类

1普通索引和唯一索引 普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。 唯一索引要求索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。 主键索引是一种特殊的唯一索引,不允许有空值。

2单列索引和组合索引 单列索引即一个索引只包含单个列,一个表可以有多个单列索引。 组合索引是指在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。使用组合索引时遵循最左前缀集合。

3全文索引 全文索引类型为FULLTEXT,在定义全文索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引可以在CHAR、VARCHAR或者TEXT类型的列上创建。MySQL中只有MyISAM存储引擎支持全文索引。

4空间索引 空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING和POLYGON。MySQL使用SPATIAL关键字进行扩展,使得能够用创建正规索引类似的语法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MyISAM的表中创建。

[33]数据库三范式

第⼀范式(1NF):原⼦性,每一个字段不可分 在这里插入图片描述 第⼆范式(2NF):唯⼀性,⾮主键字段依赖主键,而不能依赖主键一部分(针对联合主键)

第三范式(3NF):非主键列只依赖于主键,不依赖于其他非主键.。 在这里插入图片描述

[34]同时有多个事务在进行会怎么样呢?

多事务的并发进行一般会造成以下几个问题: 脏读: A事务读取到了B事务已修改、但未提交的数据,而B事务后面进行了回滚; 不可重复读: A事务同一数据进行了两次读取,获得的结果却不相同,因为B事务在此期间进行了更新; 幻读: A事务对一个范围的数据进行了两次读取,获得的结果却不相同,因为B事务在此期间插入了一条数据

[35]字段为什么要求定义成not null

null值会占用更多的字节,且会在程序中造成很多与预期不符的情况

[36]聚簇索引和非聚簇索引

聚集索引:指索引项的排序方式和表中数据记录排序方式一致的索引,也就是说聚集索引的顺序就是数据的物理存储顺序 非聚集索引: 索引顺序与物理存储顺序不同

[37]Mysql索引分哪些?

从数据结构角度 1、B+树索引, 2、hash索引: a 仅仅能满足"=",“IN"和”"查询,不能使用范围查询 b 其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引 c 只有Memory存储引擎显示支持hash索引 3、FULLTEXT索引(现在MyISAM和InnoDB引擎都支持了) 4、R-Tree索引(用于对GIS数据类型创建SPATIAL索引)

从物理存储角度 1、聚集索引(clustered index) 2、非聚集索引(non-clustered index)

聚集索引和非聚集索引的区别如下: 1.聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦 具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。 一个表中只能拥有一个聚集索引。一个表中可以拥有多个非聚集索引。 2.聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索 引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排, 降低了执行速度。非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的 如果不创建索引,系统会自动创建一个隐含列作为表的聚集索引。MySQL里主键就是聚集索引 在这里插入图片描述 从逻辑角度 1、主键索引:主键索引是一种特殊的唯一索引,不允许有空值 2、普通索引或者单列索引 3、多列索引(复合索引):复合索引指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用复合索引时遵循最左前缀集合 4、唯一索引或者非唯一索引 5、空间索引:空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MYISAM的表中创建

[38]主键、外键、索引的区别

主键:唯⼀标识⼀条记录,不允许重᯿复,不允许为空,只能有一个 ⽤来保存数据的完整性 外键:外键表示另⼀张表的主键,允许᯿重复,可以是空值 ⽤于和其它表建⽴联系 索引:允许᯿重复,可以是空值 为了提⾼查询排序分组的速度

主键与外键都是索引的一种

[39]mysql 中的外键作用

1.外键的作用: 使两张表形成关联,外键只能引用外表中的指定列的值! 2.建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表的主键)。 链接

[40]为什么索引会加快查询的速度

默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度

[续]C++岗位求职面试八股文第十九篇(数据库)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有