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

每日十题八股-2024年12月23日

1.MySQL如何避免重复插入数据?
2.CHAR 和 VARCHAR有什么区别?
3.Text数据类型可以无限大吗?
4.说一下外键约束
5.MySQL的关键字in和exist
6.mysql中的一些基本函数,你知道哪些?
7.SQL查询语句的执行顺序是怎么样的?
8.sql题:给学生表、课程成绩表,求不存在01课程但存在02课程的学生的成绩
9.sql题:给学生表、课程成绩表,求不存在01课程但存在02课程的学生的成绩
10.给定一个学生表 student_score(stu_id,subject_id,score),查询总分排名在5-10名的学生id及对应的总分?
11.执行一条SQL请求的过程是什么?

1.MySQL如何避免重复插入数据?

方式一:建表的时候使用UNIQUE约束。
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(255) UNIQUE,
name VARCHAR(255));
如果尝试插入重复的email,MySQL会返回错误。
方式二:使用INSERT … ON DUPLICATE KEY UPDATE。
insert on duplicate key update 如果在insert into语句的末尾指定了on duplicate key update + 字段更新,则会在出现重复数据(根据主键或者唯一索引判断)的时候按照后面字段更新的描述对该信息进行更新操作。
插入SQL如下: insert into person (id,name,age,address) values(3,‘那谁’,23,‘甘肃省’) on duplicate key update name=‘那谁’, age=23, address=‘甘肃省’;
首先我们将表中数据恢复,然后在进行插入操作时,发现id为3的数据发生了改变,进行了更新操作。
我们可以根据自己的业务需求进行方法的选择。
方式三:使用INSERT IGNORE。//如果id重复就直接忽略这个命令。
insert ignore into person (id,name,age,address) values(3,‘那谁’,23,‘甘肃省’),(4,‘我的天’,25,‘浙江省’);
方式四:replace into。
replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。
插入SQL如下: replace into person (id,name,age,address) values(3,‘那谁’,23,‘甘肃省’),(4,‘我的天’,25,‘浙江省’);
首先我们将表中数据恢复,然后进行插入操作后发现id为3的数据发生了改变同时新增了id为4的数据。
在这里插入图片描述

2.CHAR 和 VARCHAR有什么区别?

CHAR是固定长度的字符串类型。存储时会在末尾补足空格。
VARCHAR是可变长度的字符串类型,实际存储时根据实际长度占用存储空间。

3.Text数据类型可以无限大吗?

MySQL 3 种text类型的最大长度如下:
TEXT:64kb;
MEDIUMTEXT:16Mb;
LONGTEXT:4Gb。

4.说一下外键约束?

外键约束的作用是维护表与表之间的关系,确保数据的完整性和一致性。
在这里插入图片描述

5.MySQL的关键字in和exist?

都是用于子查询的关键词。
**in( )**后面的子查询是返回结果集的,换句话说执行次序和exists( )不一样。子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去。符合要求的输出,反之则不输出。

select * from A
where id in(select id from B)List resultSet=[];
Array A=(select * from A);
Array B=(select id from B);
for(int i=0;i<A.length;i++) {for(int j=0;j<B.length;j++) {if(A[i].id==B[j].id) {resultSet.add(A[i]);break;}}
}
return resultSet;

**exists( )**后面的子查询被称做相关子查询,他是不返回列表的值的。只是返回一个ture或false的结果,其运行方式是先运行主查询一次,再去子查询里查询与其对应的结果。如果是ture则输出,反之则不输出。再根据主查询中的每一行去子查询里去查询。

select a.* from A a 
where exists(select 1 from B b where a.id=b.id)
List resultSet=[];
Array A=(select * from A)
for(int i=0;i<A.length;i++) {if(exists(A[i].id) {    //执行select 1 from B b where b.id=a.id是否有记录返回resultSet.add(A[i]);}
}
return resultSet;

在这里插入图片描述
null值的处理没理解。

6.mysql中的一些基本函数,你知道哪些?

字符串函数;数值函数;日期和时间函数;聚合函数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.SQL查询语句的执行顺序是怎么样的?

参考
说明:从这个顺序中我们不难发现,所有的查询语句都是从FROM子句开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入。

8.sql题:给学生表、课程成绩表,求不存在01课程但存在02课程的学生的成绩

在这里插入图片描述

9.给定一个学生表 student_score(stu_id,subject_id,score),查询总分排名在5-10名的学生id及对应的总分?

在这里插入图片描述

10.存储引擎:执行一条SQL请求的过程是什么?

你会先连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接。连接命令一般是这么写的:

mysql -h$ip -P$port -u$user -p

连接建立完成后,你就可以执行 select 语句了。执行逻辑就会来到第二步:查询缓存( MySQL8.0 开始彻底没有这个功能了。)。
如果没有命中查询缓存,就要开始真正执行语句了。首先,MySQL 需要知道你要做什么,因此需要使用分析器对 SQL 语句做解析(词法分析和语法分析)。
优化器优化 SQL 具体执行的方案。比如索引的选择、join 的顺序等。
MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误。如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。
第一个问题没看懂。
在这里插入图片描述

参考
在这里插入图片描述

11.补充一题:Spring MVC的五大组件分别是什么?

1、DispatcherServlet (前端(核心)控制器)
2、HandlerMapping (处理器映射器)
3、Controller (处理请求的控制器)
4、ModelAndView (封装数据和视图信息)
5、ViewResolver (视图解析器)

DispatcherServlet(前端控制器)接收来自客户端的URL请求。请求分发器借助处理器映射器(HandlerMapping)来查找对应的处理器Handler(控制器),分发本次请求。请求分发器利用处理器适配器(HandlerAdapter)来执行对应的处理器(控制器)。处理器调用方法处理本次请求,返回模型视图对象(ModelAndView)。请求分发器借助视图解析器(ViewResolver)解析模型视图,得到对应的视图(View)。请求分发器调用视图中的方法,同时将数据模型交给视图对象,完成给客户端的应答。

http://www.lryc.cn/news/508719.html

相关文章:

  • Android Studio新建项目在源码中编译
  • ubuntu使用ffmpeg+ZLMediaKit搭建rtsp推流环境
  • vue中的css深度选择器v-deep 配合!important
  • Python读写JSON文件
  • 重温设计模式--外观模式
  • 云原生服务网格Istio实战
  • linux蓝牙模块和手机配对
  • dockerfile文档编写(1):基础命令
  • 在 Go 中利用 ffmpeg 进行视频和音频处理
  • 【机器学习】探索机器学习与人工智能:驱动未来创新的关键技术
  • React Refs 完整使用指南
  • 程控电阻箱应用中需要注意哪些安全事项?
  • C/C++基础知识复习(43)
  • 苍穹外卖-day05redis 缓存的学习
  • VSCode搭建Java开发环境 2024保姆级安装教程(Java环境搭建+VSCode安装+运行测试+背景图设置)
  • PHP MySQL 插入多条数据
  • Oracle安装报错:将配置数据上载到资料档案库时出错
  • JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
  • Deformable DETR:Deformable Transformers for End-to-End Object Detection论文学习
  • 机器学习-43-可解释性机器学习库LIME
  • 【Unity功能集】TextureShop纹理工坊(五)选区
  • Spring Cloud OpenFeign快速入门demo
  • 研发效能DevOps: Vite 使用 Element Plus
  • sfnt-pingpong -测试网络性能和延迟的工具
  • Kubernetes、Docker 和 Docker Registry 关系是是什么?
  • docker部署微信小程序自动构建发布和更新
  • 模仿elementui的Table,实现思路
  • Unity中使用环形缓冲区平滑抖动值
  • 【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
  • SpringBoot使用 AOP 实现自定义日志记录并保存在Mysql