当前位置: 主页 > JAVA语言

java面试题中的sql语句题-sql更新语句java

发布时间:2023-06-02 09:09   浏览次数:次   作者:佚名

#每日心情日记#

春节已经过完了,春招在即,好多23届应届毕业生都在头疼找工作、面试等问题,就问谁不想要一份互联网大厂offer呢?

这里是小书花费一周时间整理出来的有关SQL面试选题分享,让我们一起拿offer!

应聘时面试官看重的是逻辑思考和问题解决能力,工具是其次的,关注小书不迷路,狂背26道SQL面试题拿offer。

01.如何优化SQL查询语句

(1)对查询进行优化,首先应尽量避免全表扫描,在比较频繁使用的字段上面加上索引

(2)尽量避免在 where 子句中对索引列使用计算或者进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描

(3)Where子句中:where表之间连接必须写在其他Where 条件之前,那些可以过滤掉最大数量

(4)用EXISTS替代IN,

用NOT EXISTS替代NOT IN。

02.什么情况下设置索引但无法使用?

(1)在 where 子句中使用 or 来连接没有同时使用索引的条件,会使引擎放弃使用索引而进行全表扫描

(2)在 where 子句中对索引列使用计算或者

进行null值判断

(3)在where子句中,使用以“%”开头的

LIKE 语甸,进行模糊匹配

(4)数据类型出现隐式转化(如 varchar不

加单引号的话可能会自动转换为int型)

03.锁的优化策略?

(1)多个线程尽量以相同的顺序去获取资源。(2)不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。

(3)尽量减少锁持有的时间

(4)分段加锁

sql更新语句java_java模糊查询sql语句_java面试题中的sql语句题

(5)读写分离

04.视图的优点有哪些?

(1)简化查询:视图可以将原本复杂的SQL语句简化。比如前面讲的子查询,我们可以将被嵌套的子查询保存为视图,然后主查询直接在视图中查询就可以了。这样就不会有查询语句的嵌套,SQL语句会更加易读。视图就像模块化编程一样,不仅会使语句结构更加清晰,还提升了代码的复用率。

(2)安全性:使用视图可以保护原始数据表的安全性,视图可以对原始表的行和列进行筛选,如果我们禁止了对原始表的访问权限,用户只能通过视图来修改数据,他们就无法修改视图中未返回的那些字段和记录。

(3)更易维护:如果没有视图,所有的查询直接指向原始数据表,一旦更改原表设计,就要相应的更改该表所有的查询语句。如果有视图,我们只需要修改视图的查询语句,使其能保持原有查询结果即可,基于视图查询就不需要再修改了。

05.索引对数据库系统的负面影响是?

(1)索引需要占用物理空间,增加数据库的大小,降低正常的运行速度

(2)当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度。

06.什么情况下不适合建立索引?

(1)对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引。

(2)对于一些特殊的数据类型,不宜建立索

java面试题中的sql语句题,比如文本字段(text)等

07.数据表建立索引的原则有哪些?

(1)在最频繁使用的、用以缩小查询范围内

字段上建立索引

(2)不应该基于表来创建索引java面试题中的sql语句题,应该

基于查询来创建索引

08.索引的底层实现原理和优化?

索引的底层实现原理是B+树,优化是经过优化的B+树。主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此InnoDB建议为大部分表使用默认自增的主键作为主索引。

09.简单描述MySQL中索引、唯一索引、主键、联合索引的区别,对数据库的性能有什么影响

(从读写两方面)?

索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。

java面试题中的sql语句题_java模糊查询sql语句_sql更新语句java

(1)普通索引的唯一任务是加快对数据的访问速度,允许被索引的数据列包含重复的值。

(2)唯一索引中,每条数据记录都是唯一的,创建唯一索引用关键字 UNIQUE

(3)主键是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字PRIMARY KEY来创建。

(4)联合索引可以覆盖多个数据列,如像

INDEX(columnA, columnB)索引。

10.什么是事务?

数据库事务(transaction)是一个数据库操作序列,这些操作要么全部成功,要么全部失败,是一个不可分割的工作单位。

11.什么是数据库的ACID原则?

这个是数据库事务标准、ACID,表示原子性

(Atomicity)、一致性(Consistency)、隔离性(lsolation)、持久化(Durability)。

(1)原子性是指在一个数据库事务中所有的操作要么全部都做完,要么全部都不做。

(2)一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏,比如小明有1500元,小红有100元,小明给小红转账100元,转账完成后,小明和小红一共有1600元这个不能变。

(3)隔离性:各事务之间的操作不受影响

(4)持久化:事务一旦成功提交成功后,所有这个事务对数据库的更改全部被保留下来。

12.SQL中的视图是什么?

视图可以当成表格来用,可以将查询结果存储在视图中,后面可以直接调用这个视图数据,或者继续在视图中查询。查询语句放在create views后面,就可以建立视图。

13.如何优化MySQL?

按照以下顺序优化:

优化查询语句☞优化索引、事务处理☞优化数据表结构☞优化系统配置☞优化硬件

14.什么是存储过程?用什么来调用?

存储过程是一组SQL语句,用作访问数据库的函数。如果将sql代码与Python代码写在一起,或很混乱并且难以维护,用存储过程来代替,管理维护更加方便。可以用一个命令对象来调用存储过程,比如call。

15.4个事务隔离级别分别是?

java模糊查询sql语句_java面试题中的sql语句题_sql更新语句java

隔离级别从低到高。

(1)未授权读取(Read Uncommitted):允许脏读,脏读的意思是,一个数据还没有提交,就会出现在读取结果中,万一数据因为异常原因没有成功提交,查询结果中就会出现不存在的数据。该隔离级别可以通过“排他写锁”实现。

(2)授权读取(Read Committed):允许不可重复读取,但不允许脏读。不可重复读取的意思是,允许一端在读取数据的同时,另一端在修改数据,读取数据的一方重复读取时,数据结果不同是被允许的。可以通过“瞬间共享读锁”和“排他写锁”实现。

(3)可重复读取(Repeatable Read):禁止不可重复读取和脏读,但是有时可能出现幻读。幻读的意思是一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的数据行。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。

(4)序列化(Serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。

隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。

16.什么是Trigger(触发器)?

触发器是在插入、更新、删除语句前后自动执行的一堆SQL代码,用于对表执行特定操作。

比如在交易表中添加一条交易,在日志表中就自动添加一条记录,这样就要用到触发器。

17.什么是事件?

事件是在特定时刻自动执行任务,操作数据库。比如想在每天执行删除过期日志,就可以创建一个事件,在每天特定时刻来自动执行这一操作。

18.怎样创建事件?

用 create event 语句来创建事件。

create event 事件名称

on schedule every 1 year do begin

删除语句

end

19.下面这条语句怎么优化

MySQL 如何优化 DISTINCT?

比如优化 SELECT DISTINCT t1.a

FROM t1,t2 where t1.a=t2.a;

在数据量比较大的时候,使用distinct函数加索引列,会使索引失效,并扫描全表。

java面试题中的sql语句题_java模糊查询sql语句_sql更新语句java

这个时候,应该将 DISTINCT 在所有列,都转换为GROUP BY。

SELECT t1.a FROM t1,t2 WHERE t1.a=t2.a

GROUP BY t1.a;

20.char和varchar的区别

CHAR和 VARCHAR 类型

在存储和检索方面有所不同

(1)存储方面:CHAR列长度固定,存储为创建表时声明的长度,如果插入的长度小于定义长度,则可以用空格进行填充。而varchar是一种可变长度的类型,当插入的长度小于定义长度时,插入多长就存多长。

(2)查找效率:char查找效率会很高,varchar查找效率会更低

21.如何通俗地理解三个范式,

说说范式化设计优缺点?

第一范式(1NF):是对属性的原子性约束,要求属性具有原子性,不可再分解;

第二范式(2NF):是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

第三范式(3NF):是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

范式化的优点:可以尽量得减少数据冗余,使得更新快,体积小。

缺点:对于查询需要多个表进行关联,减少写操作的效率和增加读操作效率,更难进行索引优化

22.窗口函数是什么?和普通聚合函数的区别有哪些?

窗口函数,也叫OLAP(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理

窗口函数和普通聚合函数的区别:

(1)聚合函数是将多条记录聚合为一条;窗口函数是每条记录都会执行,不会改变记录的行数(2)聚合函数也可以用于窗口函数。

23.使用窗口函数需要注意什么?

窗口函数的执行顺序是在FROM,JOIN,WHERE,GROUP BY,HAVING之后的,所以如果这些语句,需要用到窗口函数作为条件,需要在窗口函数外面套一层查询。

24.MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

java模糊查询sql语句_sql更新语句java_java面试题中的sql语句题

(1)设计良好的数据库结构,不要过度颗粒

化,也不要使数据过渡冗余。

(2)选择合适的表字段数据类型和存储引擎,适当的添加索引。

(3)MySQL库主从读写分离。

(4)找规律分表,减少数据量提高查询速度。

(5)添加缓存机制,memcached,apc等。(6)不经常改动的页面,生成静态页面。

25.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?

首先考虑使用约束,效率最高也最方便,如check,主键,外键,非空字段等。

其次使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。

最后考虑自写业务逻辑,但这样会使编程复杂,效率低下。

26.专用窗口函数有哪些?说一说基本用法

专用窗口函数有:

rank、dense_rank、row_number等

基本语法:‹窗口函数› over (partition by ‹用于分组的列名› order by ‹用于排序的列名›)

over关键字用来指定函数执⾏的窗⼝范围,若后⾯括号中什么都不写,则意味着窗口包含满足WHERE条件的所有行,窗口函数基于所有行进行计算;如果不为空,则⽀持以下4种语法来设置窗⼝。

(1)partition by子句:窗口按照哪些字段进⾏分组,窗⼝函数在不同的分组上分别执⾏

(2)order by子句:按照哪些字段进⾏排序,窗⼝函数将按照排序后的记录顺序进⾏编号

(3)frame子句:frame是当前分区的⼀个子集,子句⽤来定义子集的规则,通常⽤来作为滑动窗⼝使⽤

(4)window_name:给窗口指定⼀个别名。如果SQL中涉及的窗口较多

我是小书,专注于数据分析领域,致力于和大家共同成长!

如果友友们还有什么疑惑或者是好攻略好建议等,咱们也可以评论区见呦!共同进步呀!

#SQL#​ #春招进行时#​ #职场#​ #互联网大厂#​ #求职面试大家说#​

sql更新语句java_java面试题中的sql语句题_java模糊查询sql语句