SQL知识汇总
什么时候用存储过程合适
- 当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;
- 当在一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对多个状态的判断更改等)要考虑;
- 还有就是比较复杂的统计和汇总也要考虑。
使用存储过程的优缺点
优点
- 速度快。尤其对于较为复杂的逻辑,减少了网络流量之间的消耗。
- 写程序简单,采用存储过程调用类,调用任何存储过程都只要1-2行代码。
- 升级、维护方便。
- 调试其实也并不麻烦,可以用查询分析器。
缺点
- 可移植性差。
- 数据量大时会比较耗时。
on duplicate key update实现(批量)插入或更新操作
一. 背景
- 背景:业务上经常有这样的需求场景,如果之前有这条数据,就做更新;如果没有,就做新增。
- 常用的处理方案:通过主键id或者其他唯一键判断DB中是否有这条数据,再判断调用insert或update语句。这样做逻辑处理起来比较复杂,降低代码效率,而且如果并发量高,可能会存在数据问题。
二. on duplicate key update概述
- 为了应对这种业务场景,MySQL有一种专有语法
(insert into ... on duplicate key update)
,一条SQL语句实现插入或更新,可单条可批量。 - 使用要点
- 表要求必须有主键或唯一索引才能起效果,否则insert或update无效。
- 该语法是根据主键或唯一键来判断是新增还是更新。
- VALUES() 后面应为需要更新的字段,不需要更新的字段不用罗列。
- 遇到已存在记录(根据唯一键或主键)时,自动更新已有的数据;如果表中有多个唯一键(可以是单列索引或复合索引),则任意一个唯一键冲突时,都会自动更新数据。
- 所有操作均由SQL处理,不需要额外程序代码分析,能够大幅提高程序执行效率。
三. on duplicate key update的使用
创建测试—book科目表
CREATE TABLE `book` (`id` int NOT NULL AUTO_INCREMENT,`unique_code` varchar(30) NOT NULL,`book_name` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `unique_code` (`unique_code`) USING BTREE COMMENT 'book unique_code'
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
执行如下命令
insert into book(unique_code,book_name) values ('zs-001','中文') on duplicate key update book_name='数学';
成功插入一条数据
再次执行步骤一命令你会发现book_name值改变
Mysql中substring_index函数的使用
一、语法
substring_index(“待截取有用部分的字符串”,“截取数据依据的字符”,截取字符的位置N)
二、案例
SELECT SUBSTRING_INDEX(‘58.33.115.130’, ‘.’, 1); //结果是58
//以第一个句号为分割截取
SELECT SUBSTRING_INDEX(‘58.33.115.130’, ‘.’, -1); //结果是130
//从后面开始算第一个句号
SELECT SUBSTRING_INDEX(‘58.33.115.130’, ‘.’, 2); //结果是58.33
使用PREPARE 动态执行sql语句
PREPARE STMT FROM @sql_str; EXECUTE STMT; DEALLOCATE PREPARE STMT;
1: DROP TABLE IF EXISTS alarm;2: CREATE TABLE alarm ( id int(11) NOT NULL auto_increment, name varchar(255) default NULL,PRIMARY KEY (id));3: 4: INSERT INTO alarm (name) values('aa');5: INSERT INTO alarm (name) values('bb');6: 7: DROP procedure if exists statalarm;8: delimiter // 9: create procedure statalarm()10: begin11: SET @id = '1,2';12: 13: SET @sql = 'select * from alarm where id IN (?)';14: PREPARE stmt FROM @sql;15: /* 16: 注意 EXECUTE 的最终语句是:select * from alarm where id IN ('1,2');17: 而不是 select * from alarm where id IN (1,2);18: 这是因为如果用户变量的值是字符串,在EXECUTE时 会自动的在变量的值前后加上引号19: */20: EXECUTE stmt USING @id;21: DEALLOCATE PREPARE stmt;22: /*23: 如果想要 组成select * from alarm where id IN (1,2);可以使用下面的语句24: */25: SET @sql = concat('select * from alarm where id IN (',@id,')');26: PREPARE stmt FROM @sql;27: EXECUTE stmt ;28: DEALLOCATE PREPARE stmt;29: 30: end;//31: delimiter ;
DECLARE CONTINUE HANDLER FOR NOT FOUND 解释
在mysql的存储过程中经常会看到这句话:DECLARE CONTINUE HANDLER FOR NOT FOUND。
它的含义是:若没有数据返回,程序继续,并将变量IS_FOUND设为0 。
JAVA调用存储过程–MYSQL
业务代码
private void statFieldCollectByOpFlag(int opFlag){log.info("开始统计成果量opflag-{}", opFlag);try {Date date = new Date();String statDate = DateUtil.formatDate(date, "yyyy-MM-dd");// 如果当前时间在6点以前,则统计前一天的int hour = date.getHours();if (hour <= 6){statDate = DateUtil.formatDate(DateUtil.dateDiffer(date, "D",-1), "yyyy-MM-dd");}Map<String, Object> map = new HashMap<String, Object>();map.put("i_op_flag", opFlag);map.put("i_stat_date", statDate);map.put("o_err_no", 0);map.put("o_err_msg", "");try {statFruitRecordService.statFruitCountInfoByProc(map);BigDecimal bigDecimal= (BigDecimal)map.get("o_err_no");Integer errNo = bigDecimal.intValue();if ( !errNo.equals(0) ){String errMsg = (String)map.get("o_err_msg");log.error("统计成果量["+opFlag+"]异常["+errNo.toString()+"]"+errMsg);}} catch (Exception e) {log.error("统计成果量["+opFlag+"]异常", e);}log.info("结束统计成果量opflag-{}", opFlag);} catch (Exception e) {log.error("结束统计成果量["+opFlag+"]异常", e);}}
Mapper代码
<select id="statFruitCountInfo" parameterType="map" statementType="CALLABLE">{call sp_stat_fruit_record(#{map.i_op_flag , mode=IN , jdbcType=NUMERIC},#{map.i_stat_date , mode=IN , jdbcType=VARCHAR},#{map.o_err_no , mode=OUT , jdbcType=NUMERIC},#{map.o_err_msg , mode=OUT , jdbcType=VARCHAR})}</select>
存储过程
-- --------------------------------------------------------
-- 主机: xx.xx.xx.xx
-- 服务器版本: 5.7.27-log - MySQL Community Server (GPL)
-- 服务器操作系统: linux-glibc2.12
-- HeidiSQL 版本: 11.0.0.5919
-- --------------------------------------------------------/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;-- 导出 存储过程 sp_stat_fruit_record 结构
DROP PROCEDURE IF EXISTS `sp_stat_fruit_record`;
DELIMITER //
CREATE PROCEDURE `sp_stat_fruit_record`(IN `i_op_flag` int,IN `i_stat_date` varchar(10),OUT `o_err_no` int,OUT `o_err_msg` varchar(128)
)COMMENT '[104]入库成果量统计'
update_proc:
BEGIN#Routine body goes here...DECLARE sp_code INT DEFAULT 104;-- START Declare ConditionsDECLARE sql_err_code INT DEFAULT 0;DECLARE var_cnt INT DEFAULT 0;DECLARE var_size INT DEFAULT 0;DECLARE var_idx INT DEFAULT 0;DECLARE var_tail varchar(16) DEFAULT '';DECLARE CONTINUE HANDLER FOR 1054 SET sql_err_code = 1054;-- Unknown columnDECLARE CONTINUE HANDLER FOR 1062 SET sql_err_code = 1062;-- Duplicate entryDECLARE CONTINUE HANDLER FOR 1329 SET sql_err_code = 0;-- No data - zero rows fetched, SELECT ed, or processedDECLARE CONTINUE HANDLER FOR SQLEXCEPTION set sql_err_code = 9999;-- END Declare Conditions-- check param-- START TRANSACTION;IF 1 != 1OR (i_op_flag IS NULL AND '' <> (@param_name := 'i_op_flag'))OR (i_stat_date IS NULL AND '' <> (@param_name := 'i_stat_date'))THENSET o_err_no = fn_sp_errno(sql_err_code, sp_code, 1);SET o_err_msg = CONCAT('缺少参数', @param_name);LEAVE update_proc;END IF;SET @element_codes = 'aoi,building,aoi_gate,unit,poi,room,internal_road';-- i_stat_date格式 'YYYY-MM-DD'-- i_op_flag-- 1 转历史-- 2 截止昨日总量统计-- 3 当日审核入库统计-- 4 当日采集入库统计IF 1 = i_op_flag THEN# 保留1周的数据SET @del_date = CONCAT(DATE_SUB(i_stat_date, INTERVAL 1 WEEK), ' 00:00:00');SET var_size = LENGTH(@element_codes)- LENGTH(REPLACE(@element_codes,",","")) + 1;SET var_idx=1;WHILE var_idx <= var_size DOSET var_tail = SUBSTRING_INDEX(SUBSTRING_INDEX(@element_codes,',',var_idx),',',-1);SET @sql_str = CONCAT('INSERT INTO his_fruit_', var_tail, ' SELECT * FROM t_fruit_', var_tail, ' WHERE update_time < "', @del_date, '"');PREPARE STMT FROM @sql_str;EXECUTE STMT;DEALLOCATE PREPARE STMT;IF 0 <> sql_err_code THENSET o_err_no = fn_sp_errno(sql_err_code, sp_code, 11);SET o_err_msg = CONCAT('审核成果转历史失败', var_tail);LEAVE update_proc;LEAVE update_proc;END IF;SET @sql_str = CONCAT('DELETE FROM t_fruit_', var_tail, ' WHERE update_time < "', @del_date, '"');PREPARE STMT FROM @sql_str;EXECUTE STMT;DEALLOCATE PREPARE STMT;IF 0 <> sql_err_code THENSET o_err_no = fn_sp_errno(sql_err_code, sp_code, 12);SET o_err_msg = CONCAT('审核成果转历史失败', var_tail);LEAVE update_proc;END IF;SET @sql_str = CONCAT('INSERT INTO his_collect_fruit_', var_tail, ' SELECT * FROM t_collect_fruit_', var_tail, ' WHERE update_time < "', @del_date, '"');PREPARE STMT FROM @sql_str;EXECUTE STMT;DEALLOCATE PREPARE STMT;IF 0 <> sql_err_code THENSET o_err_no = fn_sp_errno(sql_err_code, sp_code, 13);SET o_err_msg = CONCAT('采集成果转历史失败', var_tail);LEAVE update_proc;END IF;SET @sql_str = CONCAT('DELETE FROM t_collect_fruit_', var_tail, ' WHERE update_time < "', @del_date, '"');PREPARE STMT FROM @sql_str;EXECUTE STMT;DEALLOCATE PREPARE STMT;IF 0 <> sql_err_code THENSET o_err_no = fn_sp_errno(sql_err_code, sp_code, 14);SET o_err_msg = CONCAT('采集成果转历史失败', var_tail);LEAVE update_proc;END IF;SET var_idx = var_idx + 1;END WHILE;-- 2 截止昨日总量统计ELSEIF 2 = i_op_flag THENSELECT COUNT(1) INTO var_cnt FROM t_stat_fruit_record WHERE stat_date = '0000-00-00';IF 0 <> sql_err_code THENSET o_err_no = fn_sp_errno(sql_err_code, sp_code, 21);SET o_err_msg = '截止昨日总量统计失败';LEAVE update_proc;END IF;IF var_cnt = 0 THENINSERT INTO t_stat_fruit_recordSELECT '0000-00-00', sum(right_count), sum(error_count), 'ALL',sum(right_count), sum(error_count), now(), now() FROM t_stat_fruit_record;INSERT INTO t_stat_fruit_recordSELECT '0000-00-00', sum(right_count), sum(error_count), element_code, sum(right_count), sum(error_count), now(), now() FROM t_stat_fruit_recordWHERE element_code != 'ALL'GROUP BY element_code;ELSEUPDATE t_stat_fruit_record SET plan_project_id = right_count, plan_collect_id = error_count, update_time = now() WHERE stat_date = '0000-00-00';END IF;IF 0 <> sql_err_code THENSET o_err_no = fn_sp_errno(sql_err_code, sp_code, 22);SET o_err_msg = '截止昨日总量统计失败';LEAVE update_proc;END IF;-- 3 当日审核入库统计ELSEIF 3 = i_op_flag THENSET @start_date = CONCAT(i_stat_date, ' 00:00:00');SET @end_date = CONCAT(i_stat_date, ' 23:59:59');SET var_size = LENGTH(@element_codes)- LENGTH(REPLACE(@element_codes,",","")) + 1;SET var_idx=1;WHILE var_idx <= var_size DOSET var_tail = SUBSTRING_INDEX(SUBSTRING_INDEX(@element_codes,',',var_idx),',',-1);SET @sql_str = CONCAT(' INSERT INTO t_stat_fruit_recordSELECT "',i_stat_date,'", project_manage_id, plan_id, "', var_tail,'", SUM(CASE WHEN result_type = 1 THEN 1 ELSE 0 END) AS rightCount, SUM(CASE WHEN result_type = 2 THEN 1 ELSE 0 END) AS errorCount, now(), now()FROM t_fruit_', var_tail, ' WHERE update_time >= "', @start_date, '" AND update_time <= "', @end_date, '"GROUP BY project_manage_id, plan_idON DUPLICATE KEY UPDATEright_count = VALUES(right_count), error_count = VALUES(error_count), update_time = VALUES(update_time) ');-- SELECT @sql_str;PREPARE STMT FROM @sql_str;EXECUTE STMT;DEALLOCATE PREPARE STMT;IF 0 <> sql_err_code THENSET o_err_no = fn_sp_errno(sql_err_code, sp_code, 31);SET o_err_msg = CONCAT('截止昨日总量统计失败', var_tail);LEAVE update_proc;END IF;SET var_idx = var_idx + 1;END WHILE;-- 4 当日采集入库统计ELSEIF 4 = i_op_flag THENSET @start_date = CONCAT(i_stat_date, ' 00:00:00');SET @end_date = CONCAT(i_stat_date, ' 23:59:59');SET var_size = LENGTH(@element_codes)- LENGTH(REPLACE(@element_codes,",","")) + 1;SET var_idx=1;WHILE var_idx <= var_size DOSET var_tail = SUBSTRING_INDEX(SUBSTRING_INDEX(@element_codes,',',var_idx),',',-1);SET @sql_str = CONCAT(' INSERT INTO t_stat_fruit_collectSELECT "',i_stat_date,'", project_manage_id, plan_id, "', var_tail,'", SUM(CASE WHEN result_type = 1 THEN 1 ELSE 0 END) AS rightCount, SUM(CASE WHEN result_type = 2 THEN 1 ELSE 0 END) AS errorCount, now(), now()FROM t_collect_fruit_', var_tail, ' WHERE update_time >= "', @start_date, '" AND update_time <= "', @end_date, '"GROUP BY project_manage_id, plan_idON DUPLICATE KEY UPDATEright_count = VALUES(right_count), error_count = VALUES(error_count), update_time = VALUES(update_time) ');-- SELECT @sql_str;PREPARE STMT FROM @sql_str;EXECUTE STMT;DEALLOCATE PREPARE STMT;IF 0 <> sql_err_code THENSET o_err_no = fn_sp_errno(sql_err_code, sp_code, 41);SET o_err_msg = CONCAT('截止昨日总量统计失败', var_tail);LEAVE update_proc;END IF;SET var_idx = var_idx + 1;END WHILE;ELSESET o_err_no = fn_sp_errno(sql_err_code, sp_code, 99);SET o_err_msg = '未支持的操作类型';LEAVE update_proc;END IF;-- ok-- COMMIT;-- okSET o_err_no = 0;
END//
DELIMITER ;/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
相关文章:
SQL知识汇总
什么时候用存储过程合适 当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;当在一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对多个状态的判断更改等)要考虑;…...
区位码-GB2312
01-09区为特殊符号 10-15区为用户自定义符号区(未编码) 16-55区为一级汉字,按拼音排序 56-87区为二级汉字,按部首/笔画排序 88-94区为用户自定义汉字区(未编码) 特殊符号 区号:01 各类符号 0 1 2 3 4 …...
文本识别、截图识别保存和多文件识别
一、源码 github源码 二、介绍 采用Tesseract OCR识别 采用多线程进行图片识别 界面 选择 文件是可以识别本地的多张图片文件夹是识别文件夹里面的所有图片的内容截图 可以复制到剪切板、可以识别也可以直接保存 重置 是清除选择的图片和识别结果语言选择 是选择不同的模型…...
针对近日ChatGPT账号大批量封禁的理性分析
文 / 高扬 这两天不太平。 3月31号,不少技术圈的朋友和我闲聊说,ChatGPT账号不能注册了。 我不以为然,自己有一个号足够了,并不关注账号注册的事情。 后面又有不少朋友和我说ChatGPT账号全部不能注册了,因为老美要封锁…...
MATLAB算法实战应用案例精讲-【人工智能】对比学习(概念篇)
目录 前言 几个高频面试题目 推荐领域的对比学习在设计代理任务时与CV和NLP领域有什么不同?...
WeakMap 与 WeakSet
WeakSet WeakSet 结构与 Set 类似,也是不重复的值的集合。 成员都是数组和类似数组的对象,WeakSet 的成员只能是对象,而不能是其他类型的值。 若调用 add() 方法时传入了非数组和类似数组的对象的参数,就会抛出错误。 const b …...
【hello Linux】进程信号
目录 1. 进程信号的引出及整体概况 2. 信号的产生 1. 键盘产生 2. 进程异常 3. 系统调用 4. 软件条件 3. 信号的保存 1. 信号相关的常见概念 2. sigset_t 3. 信号集操作函数 4. sigprocmask:对block位图的操作 5. sigpending:对pending位图的操作 6. 捕捉…...
【SpringBoot】获取HttpServletRequest的三种方式
方法一: Controller中增加request参数 RestController public class DemoController { RequestMapping("/demo")public void demo(HttpServletRequest request) { System.out.println(request.getParameter("hello"));} }线程安全缺点: 每个方法都…...
k8s DCGM GPU采集指标项说明
dcgm-exporter 采集指标项 指标解释dcgm_fan_speed_percentGPU风扇转速占比(%)dcgm_sm_clockGPU sm 时钟(MHz)dcgm_memory_clockGPU 内存时钟(MHz)dcgm_gpu_tempGPU 运行的温度(℃)dcgm_power_usageGPU 的功率(w)dcgm_pcie_tx_throughputGPU PCIeTX 传输的字节总数 (kb)dcgm_pc…...
从线程安全到锁粒度,使用Redis分布式锁的注意事项
关于 Redis 的分布式锁 在分布式的场景下,多个服务器之间的资源竞争和访问频繁性,为了数据的安全和性能的优化,我们需要引入分布式锁的概念,这把锁可以加在上层业务需要的共享数据/资源上,能够同步协调多个服务器的访…...
CopyOnWriteArrayList 的底层原理与多线程注意事项
文章目录 CopyOnWriteArrayList 的底层原理与多线程注意事项1. CopyOnWriteArrayList 底层原理1.1 概念说明1.2 实现原理1.3 优点1.4 缺点 2. CopyOnWriteArrayList 多线程注意事项与实例2.1 注意事项2.2 示例2.2.1 示例代码 3. 总结 CopyOnWriteArrayList 的底层原理与多线程注…...
互斥锁深度理解与使用
大家好,我是易安! 我们知道一个或者多个操作在CPU执行的过程中不被中断的特性,称为“原子性”。理解这个特性有助于你分析并发编程Bug出现的原因,例如利用它可以分析出long型变量在32位机器上读写可能出现的诡异Bug,明明已经把变量…...
Elasticsearch --- 数据聚合、自动补全
一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这…...
Haproxy搭建web群集
一.常见的web集群调度器 1、目前常见的web集群调度器分为软件和硬件 2、软件通常使用开源的LVS、Haproxy、Nginx LVS 性能最好,但搭建复杂。Nginx并发量,性能低于Haproxy 3、硬件一般使用比较多的是F5,也有很多人使用国内的一些产品&a…...
Packet Tracer - 配置和验证小型网络
Packet Tracer - 配置和验证小型网络 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 RTA G0/0 10.10.10.1 255.255.255.0 不适用 G0/1 10.10.20.1 255.255.255.0 不适用 SW1 VLAN1 10.10.10.2 255.255.255.0 10.10.10.1 SW2 VLAN1 10.10.20.2 255.25…...
Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取相机设备的各种固件信息如DeviceID或者SerialNumber等(C++)
项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具…...
java 的参数传递
一、疑惑引入 首先,我们从一个例子来引出这个问题: public static void main(String[] args) throws IOException {List<String> mockList Lists.newArrayList("a", "b");System.out.println("1: " mockList);L…...
【面试长文】HashMap的数据结构和底层原理以及在JDK1.6、1.7和JDK8中的演变差异
文章目录 HashMap的数据结构和底层原理以及在JDK1.6、1.7和JDK8中的演变差异HashMap的数据结构和原理JDK1.6、1.7和1.8中的HashMap源码演变JDK1.6JDK1.7JDK1.8 总结自己实现一个简单的HashMapHashMap的时间复杂度分析HashMap的空间复杂度分析HashMap的应用场景HashMap的弊端及解…...
【25】linux进阶——网络文件系统NFS
大家好,这里是天亮之前ict,本人网络工程大三在读小学生,拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识,希望能提高自己的技术的同时,也可以帮助到大家 另外其它专栏请关注: 锐捷数通实验&…...
JAVA入坑之JAVADOC(Java API 文档生成器)与快速生成
目录 一、JAVADOC(Java API 文档生成器) 1.1概述 1.2Javadoc标签 1.3Javadoc命令 1.4用idea自带工具生成API帮助文档 二、IDEA如何生成get和set方法 三、常见快捷方式 3.1快速生成main函数 3.2快速生成println()语句 3.3快速生成for循环 3.4“…...
React | React组件化开发
✨ 个人主页:CoderHing 🖥️ React .js专栏:React .js React组件化开发 🙋♂️ 个人简介:一个不甘平庸的平凡人🍬 💫 系列专栏:吊打面试官系列 16天学会Vue 11天学会React Node…...
云计算的优势与未来发展趋势
一、前言二、云计算的基础概念2.1 云计算的定义2.2 云计算的发展历程2.3 云计算的基本架构2.4 云计算的主要服务模式 三、企业采用云计算的优势3.1 降低成本3.2 提高效率和灵活性3.3 提升信息系统的安全性和可靠性3.4 拥有更加丰富的应用和服务 四、行业应用案例4.1 金融行业4.…...
shell编程lesson01
命令行和脚本关系 命令行:单一shell命令,命令行中编写与执行; 脚本:众多shell命令组合成一个完成特定功能的程序,在脚本文件中进行编写维护。 脚本是一个文件,一个包含有一组命令的文件。 编写一个shel…...
看看人家的MyBatis批量插入数据优化,从120s到2.5s,那叫一个优雅!
粗略的实验 最后 最近在压测一批接口的时候,我发现接口处理速度比我们预期的要慢。这让我感到有点奇怪,因为我们之前已经对这些接口进行了优化。但是,当我们进行排查时,发现问题出在数据库批量保存这块。 我们的项目使用了 myb…...
软件和信息服务业专题讲座
软件和信息服务业专题讲座 单选题(共 10 题,每题 3 分) 1、根据本讲,我国要加强物联网应用领域()开发和应用。 A、大数据 2、根据本讲,要充分发挥软件对城市管理和惠民服务的(&am…...
由 ChatGPT 团队开发,堪称辅助神器!IntelliJ IDEA 神级插件
什么是Bito? 为什么要使用Bito? 如何安装Bito插件 如何使用Bito插件 什么是Bito? Bito是一款由ChatGPT团队开发的IntelliJ IDEA编辑器插件,旨在提高开发人员的工作效率。此插件强大之处在于它不仅可以帮助开发人员更快地提交…...
spass modeler
课时1:SPSS Modeler 简介 本课时一共分为五个模块,分别是Modeler概述、工具安装、窗口说明以及功能介绍和应用案例。相信通过本课时内容的学习,大家将会对SPSS Modeler有个基础的了解. 在学习本节课内容之前,先来看看本节课我们究…...
kafka的push、pull分别有什么优缺点
文章目录 kafka的push、pull分别有什么优缺点Push 模式优点缺点 Pull 模式优点缺点 实践操作 kafka的push、pull分别有什么优缺点 Kafka 是由 Apache 软件基金会开发的一个开源流处理平台,广泛应用于各大互联网公司的消息系统中。在 Kafka 中,生产者使用…...
【Canvas入门】从零开始在Canvas上绘制简单的动画
这篇文章是观看HTML5 Canvas Tutorials for Beginners教程做的记录,所以代码和最后的效果比较相似,教程的内容主要关于这四个部分: 创建并设置尺寸添加元素让元素动起来与元素交互 设置Canvas的大小 获取到canvas并设置尺寸为当前窗口的大…...
【技术整合】各技术解决方案与对应解决的问题
文章目录 基本实现性能安全 本文将框架分为三大类: 基本实现:包括某个供能或者提供web、移动端、桌面端、或者上述端上的某种功能性能:提升高可用、高并发的框架安全:包括网络安全、权限与容灾等 基本实现 .NET CORE、.NET web基…...
网站设计建设趋势/苏州网站开发公司
互联网的兴起现在已经成为当今世界的主流媒体和信息传播媒介,做为互联网的应用各个终端用户是组成这一互联网世界的主体。如何行之有效的进行互联网的接入和应用成为了一个主要的问题。 小区宽带运营就此出现,做为新兴的网络接入运营模式。小区宽带运营在…...
微信如何做模板下载网站/百度快照搜索引擎
说明: 有时候服务器是内网服务器,无法连接互联网,即无法使用互联网的yum源,这是如果安装salt的话会有一点麻烦,下面说下我是怎么做的。 第一步:使用虚拟机或者可以联网的服务器安装一遍salt,安装…...
曲靖手机网站建设/网络营销专业如何
Java RMI基础Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能…...
做早餐的网站/直销怎么做才最快成功
1.启动cmd命令窗口,进入本机MySQL安装bin目录: 2.关闭本机的MySQL进程(可以直接在任务管理器中找到并关闭进程)也可以命令关闭: # 关闭MySQL服务D:\MySQL\bin>sc stop mysql3. 以安全模式启动MySQLD:\MySQL\bin>…...
什么人最需要建设网站/免费推广seo
以下内容均为微信内置浏览器访问的场景。本文只阐述微信分享的URL的坑,不阐述具体的代码实现和JS-SDK的具体使用。 大家有没有发现,某些网站访问的路径与最终分享的路径不同!对,没错,就是不同。 微信JS-SDK分享的URL有…...
wordpress建个人网站/成都专门做网站的公司
1.验证外星语词典 题目: 某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。 给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的…...