Mysql-通过创建存储过程完成“对多个同类表进行查询并将结果汇总储存在新表中”

本文介绍了如何在MySQL中通过创建存储过程,解决从多个相同结构的表中查询每个类别TopN用户数据的问题。文章详细阐述了存储过程的创建步骤,包括建立数据集、创建存储过程、调用存储过程并展示结果。此外,还分享了初稿中因不熟悉MySQL循环特性而采用双存储过程的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例背景:公司数据储存在N张表中,N是大数,现在需要求每个类别某类数据topN用户的数据
代码结果:创建存储过程将数据从多个相同表中查询求topN并存入,

本文主要内容

知识点

分组查询topN问题 https://editor.youkuaiyun.com/md/?articleId=126635132

创建存储过程

案例

存储过程知识点介绍

mysql存储过程文档:
https://www.runoob.com/w3cnote/mysql-stored-procedure.html

案例
建立数据集

#创建表
create table orders1 (
    orderid int(11) not null primary key ,
    Itemid varchar(30) not null ,
    category varchar(10) not null ,
    orderdate datetime not null ,
    sales float not null );#创建表
create table orders2 like orders1;
create table orders3 like orders1;
create table orders4 like orders1;
create table orders5 like orders1;
#插入数据
insert into orders1 (orderid, Itemid, category, orderdate, sales)
values ('1','k1','A','2020-1-2','459.5'),
       ('2','k2','A','2020-2-2','345.4'),
       ('3','k1','A','2020-1-7','47'),
       ('4','k3','C','2020-1-21','678'),
       ('5','k4','B','2020-5-2','345'),
       ('6','k5','C','2020-3-12','654'),
       ('7','k4','B','2020-4-25','464'),
       ('8','k2','A','2020-5-28','632'),
       ('9','k3','C','2020-7-20','98'),
       ('10','k5','C','2020-4-28','455.6'),
         ('11','k1','A','2020-3-27','459.7'),
       ('12','k2','A','2020-2-23','776.6'),
       ('13','k4','B','2020-2-12','759'),
       ('14','k5','C','2020-8-2','999'),
       ('15','k2','A','2020-9-21','599'),
       ('16','k3','C','2020-10-21','433'),
       ('17','k4','B','2020-10-28','232'),
       ('18','k5','C','2020-10-3','124'),
       ('19','k3','C','2020-6-6','321.4'),
       ('20','k4','B','2020-9-11','788.6');
 insert into orders2 
<think>嗯,用户问的是国企Java技术面常问的问题汇总,还要附答案。首先,我需要回忆一下国企的技术面试通常关注哪些方面。国企可能更注重基础知识和稳定性,不像互联网公司那么爱问高发、分布式这些,但也不一定,有些国企项目也可能涉及这些技术。所以得先确定范围,基础是关键。 首先,Java基础肯定是必问的。比如面向对象的特性、集合框架、异常处理、多线程这些。然后,数据库相关的问题,比如SQL优化、事务隔离级别。还有框架方面,Spring、SpringMVC、SpringBoot,MyBatis这些可能也会问到。另外,国企可能对JVM、设计模式、网络基础也有要求。需要涵盖这些方面。 接下来,我需要列出每个部分的常见问题。例如,面向对象的三大特性:封装、继承、多态。集合框架中的ArrayList和LinkedList区别,HashMap的底层原理。多线程的创建方式,线程池的参数。Spring的IoC和AOP,事务管理。数据库的事务特性,隔离级别,索引优化。JVM的内存模型,垃圾回收算法。设计模式如单例模式、工厂模式。网络方面的HTTP和HTTPS区别,TCP三次握手。 然后,每个问题需要给出简明扼要的答案,确保正确性。比如,HashMap在JDK1.8之后是数组+链/红黑树,加载因子0.75,扩容机制。线程池参数包括核心线程数、最大线程数、队列等。Spring的事务传播行为,比如REQUIRED和REQUIRES_NEW的区别。 还要注意用户提到的格式要求,数学公式要用$...$或者$$...$$,但这里可能涉及到的数学内容不多,不过如果有算法相关的问题,比如排序算法的时间复杂度,可能需要用到LaTeX。例如,快速排序的平均时间复杂度是$O(n \log n)$。需要检查是否所有行内公式都正确使用了$符号。 另外,用户要求结构清晰,分点回答。可能需要分为Java基础、数据库、框架、JVM、设计模式、网络等模块,每个模块下列出问题及答案。答案要简洁,便于面试时快速回忆。 需要验证每个知识点的准确性,比如synchronized和ReentrantLock的区别,是否正确。事务的隔离级别,读未提交、读已提交、可重复读、串行化,是否正确。索引的最左前缀原则是否正确。 可能还需要考虑国企面试中常见的场景问题,比如如何处理大量数据,如何保证系统稳定性,但用户主要问的是技术问题,可能不需要涉及太多场景题。不过如果有的话,可以补充。 最后,确保使用中文,避免使用Markdown格式,按照用户的要求结构清晰,分点列出。同时检查LaTeX语法是否正确,比如多行公式是否用了$$,行内是否正确使用$符号。</think>以下整理了国企Java技术面试的常见问题及参考答案,内容涵盖基础知识、框架、数据库等方向,帮助系统性准备: --- ### 一、Java基础 1. **面向对象三大特性** - **封装**:隐藏对象内部细节,通过方法暴露操作 - **继承**:子类复用父类属性和方法,实现代码复用 - **多态**:同一方法在不同对象中有不同实现(重写、接口) 2. **ArrayList vs LinkedList** - **ArrayList**:基于数组,随机访问快($O(1)$),增删慢(需移动元素) - **LinkedList**:基于链,增删快($O(1)$),随机访问慢($O(n)$) 3. **HashMap底层原理** - JDK1.8前:数组+链,冲突时链存储 - JDK1.8+:链长度≥8时转为红黑树,查询效率$O(\log n)$ - 扩容机制:负载因子默认0.75,容量翻倍 --- ### 二、多线程与发 1. **创建线程的3种方式** - 继承`Thread`类 - 实现`Runnable`接口 - 实现`Callable`接口 + `FutureTask` 2. **synchronized vs ReentrantLock** - **synchronized**:JVM级别锁,自动释放,不可中断 - **ReentrantLock**:API级别锁,需手动释放,支持公平锁、条件变量 3. **线程池核心参数** ```java ThreadPoolExecutor( int corePoolSize, // 核心线程数 int maximumPoolSize, // 最大线程数 long keepAliveTime, // 空闲线程存活时间 TimeUnit unit, // 时间单位 BlockingQueue<Runnable> workQueue // 任务队列 ) ``` --- ### 三、数据库SQL 1. **事务ACID特性** - **原子性**:事务全部成功或全部回滚 - **一致性**:数据状态符合约束 - **隔离性**:事务间互不干扰 - **持久性**:提交后数据永久保存 2. **事务隔离级别** - 读未提交 → 读已提交 → 可重复读 → 串行化 - MySQL默认**可重复读**,通过MVCC实现 3. **索引优化原则** - 最左前缀匹配原则 - 避免在索引列上使用函数或计算 - 优先选择区分度高的字段建索引 --- ### 四、Spring框架 1. **IoC(控制反转)** 将对象创建、依赖注入交给Spring容器管理,降低耦合度 2. **AOP(面向切面编程)** 通过动态代理实现日志、事务等横切关注点的模块化,核心概念: - 切面(Aspect) - 连接点(JoinPoint) - 通知(Advice) 3. **@Transactional失效场景** - 方法非public - 同类方法调用(未通过代理对象) - 异常类型非RuntimeException且未配置`rollbackFor` --- ### 五、JVM相关 1. **内存模型** - 堆(对象实例) - 方法区(类信息、常量池) - 虚拟机栈(方法调用栈帧) - 程序计数器(当前线程执行位置) 2. **垃圾回收算法** - 标记-清除 → 复制 → 标记-整理 - 分代收集:生代(复制算法),老年代(标记-整理) --- ### 六、设计模式 1. **单例模式实现** ```java // 双重校验锁 public class Singleton { private volatile static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 2. **工厂模式应用场景** 解耦对象创建与使用,例如Spring的BeanFactory --- ### 七、网络基础 1. **TCP三次握手流程** - Client → SYN → Server - Server → SYN+ACK → Client - Client → ACK → Server 2. **HTTP与HTTPS区别** - HTTP明文传输,HTTPS通过SSL/TLS加密 - HTTPS默认端口443,HTTP端口80 --- **提示**:国企面试更注重基础扎实性,建议结合项目经验说明技术应用场景,同时准备算法题(如LeetCode简单/中等难度)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值