Java从入门到工作4 - MySQL
一:检测数据库网络
telnet 127.0.0.1 3306
注意ip和端口后之间是空格,不需要引号
二:SQL语法
1、创建结果集
SELECT '电视机' AS typeUNION SELECT '电冰箱'UNION SELECT '洗衣机'UNION SELECT '空调'UNION SELECT '电脑'UNION SELECT '热水器'UNION SELECT '吸油烟机'UNION SELECT '吸尘器'
这段 SQL 查询用于创建一个结果集,其中包含多个固定值。具体理解如下:
-
SELECT '电视机' AS type:这一行创建第一条记录,返回一个值
'电视机'
并将其命名为type
。 -
UNION:这个关键字用于合并多个 SQL 语句的结果集。它确保结果中的每一条记录都是唯一的(默认情况下会去掉重复记录)。
-
SELECT '电冰箱',SELECT '洗衣机',等:每一条
UNION
之后的SELECT
语句都返回一个新的固定值,表示不同的电器品类。
最终,这段 SQL 查询生成的结果是一个包含以下内容的单列结果集:
- 电视机
- 电冰箱
- 洗衣机
- 空调
- 电脑
- 热水器
- 吸油烟机
- 吸尘器
用途:这个查询通常用于构建一个临时的表或列表,其中包含预定义的数据项,这在分析、报告或合并查询时非常有用。结合其他表进行连接查询时,可以确保结果集的完整性,尤其是在需要确保所有选定项目都包含在结果中时。
2、JOIN
在 MySQL 中,JOIN
操作用于根据两个或多个表之间的相关列进行组合。常见的连接类型包括 INNER JOIN
(通常简称为 JOIN
)、LEFT JOIN
和 RIGHT JOIN
。它们的区别如下:
-
INNER JOIN(或简写为
JOIN
):- 仅返回两个表中匹配的行。
- 如果某个表中没有与另一个表匹配的行,则该行不会出现在结果集中。
-
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.for_id;
-
LEFT JOIN(或称为
LEFT OUTER JOIN
):- 返回左表(
LEFT JOIN
前的表)中的所有行,即使右表中没有与之匹配的行。 - 如果右表中没有匹配的行,结果集中该行的右表列将显示为
NULL
。 -
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.for_id;
- 返回左表(
-
RIGHT JOIN(或称为
RIGHT OUTER JOIN
):- 返回右表(
RIGHT
前的表)中的所有行,即使左表中没有与之匹配的行。 - 如果左表中没有匹配的行,结果集中该行的左表列将显示为
NULL
-
SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.for_id;
- 返回右表(
总结:
- INNER JOIN 只返回匹配的行。
- LEFT JOIN 返回左表的所有行以及右表中匹配的行,右表不匹配的部分用
NULL
填充。 - RIGHT JOIN 返回右表的所有行以及左表中匹配的行,左表不匹配的部分用
NULL
填充。
使用这些连接类型可以根据需要灵活地获取相关的数据。
3、执行顺序
3.1、SQL执行顺序
在MySQL中,SQL查询的执行顺序通常为:
- FROM:从哪张表中获取数据。
- JOIN:连接其他表,形成结果集。
- WHERE:过滤数据,删除不符合条件的行。
- GROUP BY:根据指定列对结果集进行分组。
- HAVING:对分组后的结果进行过滤(在GROUP BY之后)。
- SELECT:选择要显示的列。
- ORDER BY:对结果集进行排序。
- LIMIT:限制返回的行数。
这就是SQL查询的标准执行顺序。
- from / join 解决从哪里查
- where / group by / having 筛选处理数据
- select 拿到哪些数据
- order by / limit 处理拿到的数据
3.2、阅读SQL顺序
知道了SQL的执行顺序,就知道如何快速的阅读sql
- select的内容先不看,
- 先从from、join开始看,先知道是查哪些表。
- where也可以先不看,它只是过滤部分行
- 再看group by,这时基本能够理解SQL的整体任务了
- 回头去看where 、select、order by等细节了
4、使用别名
不完全是。只能在 ORDER BY
和 HAVING
中使用前面 SELECT
子句中的别名,而在 WHERE
和 GROUP BY
中不能使用这些别名。具体来说:
- 可以使用别名:
ORDER BY
和HAVING
。 - 不能使用别名:
WHERE
和GROUP BY
。
5、执行计划
MySQL执行计划的主要列及其含义如下:
- id:查询的标识符,表示查询的顺序和层级。
- select_type:查询的类型,如
SIMPLE
(简单查询)、PRIMARY
(主查询)、SUBQUERY
(子查询)等。 - table:当前操作的表名。
- type:连接类型,表示访问表的方式,如
all
(全表扫描)、index
(索引扫),range
(范围扫描)等。类型越优越越好。 - possible_keys:可能使用的索引列表。
- key:实际使用的索引。
- key_len:索引长度,表示使用的字节数。
- ref:与索引匹配的字段或常量。
- rows:估算需要扫描的行数。
- filtered:估算在输出结果中,符合条件的行的百分比。
- Extra:额外信息,如
Using index
、Using where
、Using filesort
等,提供查询优化的线索。
这些列的组合可以帮助分析并优化查询性能。
6、索引
以下情况可能会触发命中索引:
-
WHERE 子句:当查询中使用的条件字段在索引中时,会触发索引命中,尤其是相等条件和范围条件。
-
JOIN 条件:连接查询中涉及到的字段如果有索引,也会导致索引的使用。
-
GROUP BY 子句:
GROUP BY
中字段有索引时,可以加速分组操作。 -
HAVING 子句:在
HAVING
中使用的字段如果有索引,可以提高筛选效率(但通常在WHERE
中能更早筛选)。 -
ORDER BY 子句:如果
ORDER BY
中字段有索引,查询可以利用索引直接排序,避免额外的排序操作。 -
UNIQUE 和 FOREIGN KEY 约束:这些约束条件会自动创建索引,从而支持快速查找。
-
子查询中的条件:如果子查询涉及到的字段有索引,也可能触发索引命中。
确保索引设计合理,选择合适的字段建立索引,有助于提高查询性能。
7、数据类型
7.1、日期字段
日期字段使用频率非常高,比如交易表中需要保存多个时间字段,它们的数据类型可能不同,就是同一数据类型,但保存的格式也有可能不同。如下从三个例子展开
- create_time:数据类型为date_time,保存格式为 2024-09-15 16:20:16
- modi_time: 数据类型为date, 保存格式为 2024-09-15
- play_time: 数据类型为 varchar,保存格式为 2024-10-14 15:55:47
- play_date: 数据类型为 varchar,保存格式为 20241014
简而言之,
无论时间字段存储为 VARCHAR
还是 DATETIME
,在比较时都可以直接与时间字符串进行比较,只要确保时间字符串的格式正确(如 'YYYY-MM-DD HH:MM:SS'
)。对于 VARCHAR
字段,关键是保持格式的一致性以确保正确的比较。
从底层上讲,
对于数据类型为varchar的字段跟字符串比较,是基于字典序比较的。即一个个字符按顺序轮流对比的,所以这种比较只有在数据格式保持一致时才有效。但不建议在日期时间数据中使用 VARCHAR
类型,因为这样会导致潜在的错误和性能问题。
对于数据类型为Date的字段跟字符串比较,在进行比较时并不是基于字典序比较,而是基于日期的内在表示进行比较。这种比较方式确保了日期的正确性,避免了诸如字符串比较可能带来的错误。可以确保更准确和高效的比较操作。
7.2、日期比较
7.2.1、date_time类型
create_time是正经日期类型的字段,需要注意格式YYYY-MM-DD
筛选动态日期数据
create_time >= CURDATE() and create_time < CURDATE() + interval 1 day
筛选固定日期数据
筛选某一天前的数据,create_time < ='2023-09-30'即可create_time 数据类型如果为date_time,上面将自动转为2023-09-30 00:00,只能取到29号数据create_time 数据类型如果为date类型,上面就是2023-09-30,能取到30号数据
7.2.2、varchar类型
play_date存的字符串如’20241015‘,不专业不规范。但筛选时间也是可以直接跟字符串对比的
筛选动态日期数据
-- 将当天日期,转成%Y%m%d格式
consume.play_date = DATE_FORMAT(CURDATE(), '%Y%m%d')
consume.play_date > DATE_FORMAT(CURDATE(), '%Y%m%d') // 这样varchar跟date也能比。但是效率低70%且无法保证正确性
consume.play_date = CURDATE()
筛选固定日期数据
-- 将当天日期,转成%Y%m%d格式
consume.play_date = '20241028'
consume.play_date > '20241028'
8、函数
8.1、DATE_FORMAT()
接收日期类型,返回字符串类型
DATE_FORMAT(CURDATE(), '%Y%m%d')
8.2、CURDATE()
CURDATE()
返回的是当前日期,格式为 YYYY-MM-DD
,类型为 DATE
今天 CURDATE() ,格式为 2024-10-15 00:00:00
明天 CURDATE() + interval 1 day,格式为 2024-10-16 00:00:00
8.3、hour()
获取时间中的小时数,时间是varchar类型和dateTime类型都行,但需要注意格式hh:mm:ss
SELECT Hour('2024-10-27 19:22:33')
SELECT Hour('19:22:33') 以上都返回19
9、In和Or
In和or都在where语句中使用,当同一个字段跟多个值比较时使用。
比如查询姓名是孙权、曹操、刘备、张飞、刘季的数据,都是name字段,但是筛选多个值
or实现: where name = '孙权' or name = '曹操' or name = '刘备' or name = '张飞'
in实现: where name in (孙权,曹操,刘备,张飞)
在有索引的情况下or的效率比in更高,数据库会优化
三:心得
1、select关键词
此关键词决定sql输出的字段
select * 表示输出所有字段
2、SQL思路
写语句前,先分析需求,需要查出什么字段,从哪个表查,需不需要分组
3、关键字
select 用来确定返回那些字段,
where 用来过滤要返回的数据,
group by 用来合并要返回的数据
4、SQL慢查询优化
大佬的总结:Docs
四:小应用
1、百分比处理
先把小数*100,然后用ROUND方法保留0位小数,然后用CONCAT拼上“%”
CONCAT(ROUND(data*100,0),'%'
)
2、无数据补0返回
品类无数据【补0】返回
SELECTCOALESCE(COUNT(type), 0) AS '交易笔数',
3、本月12点前的数据
笨写法
wherename = 'sq' and((pay_time >= '2024-10-02 00:00:00' AND pay_time <= '2024-10-02 12:00:00') or (pay_time >= '2024-10-03 00:00:00' AND pay_time <= '2024-10-03 12:00:00') or (pay_time >= '2024-10-04 00:00:00' AND pay_time <= '2024-10-04 12:00:00') or (pay_time >= '2024-10-05 00:00:00' AND pay_time <= '2024-10-05 12:00:00') or (pay_time >= '2024-10-06 00:00:00' AND pay_time <= '2024-10-06 12:00:00') )
正确写法
wherename = 'sq' andpay_time >= '2024-10-02 00:00:00' andpay_time <= '2024-11-01 00:00:00' andHOUR(pay_time) < 10
4、当天所有时段数据
SELECT DATE_FORMAT(consume.pay_time, '%Y-%m-%d %H:00:00') 小时,COUNT(1) AS '订单',
FROM ...
WHERE x_time >= CURDATE() -- 今天的开始时间AND consume.x_time < CURDATE() + INTERVAL 1 DAY -- 明天的开始时间
GROUP BY DATE_FORMAT(x_time, '%Y-%m-%d %H:00:00')
ORDER BY 小时
小时 | 订单 |
2024/12/13 15:00 | 258 |
2024/12/13 16:00 | 16 |
在上述 SQL 查询中,使用 DATE_FORMAT(consume.x_time, '%Y-%m-%d %H:00:00')
作为分组字段,结果表示每个小时的开始时间。因此:
查询中的 2024/12/13 15:00
的结果代表的是 2024/12/13 15:00:00
到 2024/12/13 15:59:59
这一时间段的交易数据。
五:SQL优化
1、大表联小表翻译
可将某个表分组后再外连的辨别要点:
- 语句顺序为:table1 left join table2 left join table3 where...group by...limit
- where/group by/order by压根不涉及某个外连表的字段
如下为具体示例
主表是大表100w数据,二表3000数据,三表3000数据
左联两个小表,为了映射字段名称
操作数据为100w*3000*3000最后取20条数据
改造思路:聚合和排序在大表先做好,再关联小表
操作数据为20*3000*3000
2、合并SQL
当一个sql需要查n个指标,n个指标因where条件不同可能JOIN了很多个子查询。
当数据量很大时,多个子查询可能就导致多次扫表,效率很低。
这时可以看下where中是否大部分条件是相同的,可以将共用的条件抽出来放在一个where中。然后在select中使用case when来使用那些各个指标特殊的条件。
这样只扫一次表,可能会提高查询效率。最起码SQL看起来简洁很多,便于维护与下一步的优化。
SELECT COUNT(CASE WHEN status = 4 THEN 1 END) AS 指标一,COUNT(CASE WHEN name is not null THEN 1 END) AS 指标二FROM tblWHERE公共条件
3、备份数据库
统计类的SQL非常消耗数据库资源,最好还是搞个备份库专门服务统计类查询,实现数据隔离,避免将业务库查崩。
3.1、如何实现备份库数据同步?
通过数据库审计功能,实现业务库跟备份库的数据同步问题。怎么理解数据库审计?
数据库审计是对数据库活动进行监控和记录的过程。其主要目的是确保数据的安全性、合规性和完整性。审计功能通常包括以下几个方面:
- 访问监控:记录哪些用户访问了数据库、何时访问、执行了哪些操作。
- 变更跟踪:监控数据的插入、更新和删除操作,确保能够追溯数据变化的来源。
- 合规性审核:验证数据库操作是否符合规定的安全和合规性标准。
- 异常检测:识别潜在的安全威胁或违规行为。
在业务库与备份库的数据同步中,数据库审计可以帮助确保同步过程的透明性和可靠性,及时发现和纠正同步过程中可能出现的问题。通过审计日志,可以追踪到哪些数据被同步、是否存在失败或异常操作,从而提供数据一致性的保障。
4、避免在where里使用函数
如果该字段有索引,函数会使索引失效!
实例1:where中某字段有索引避免使用函数
如下示例,sale_city为字符串有索引。同一个处理,两种写法。
第一种索引失效,第二种索引命中
- where SUBSTRING(a.city, 1, 4) = 4113
- where a.city like '4102%'
实例2:where中某字段无索引也避免使用函数
如下示例,create_time日期类型
有索引。同一个处理,两种写法。
第一种索引失效,第二种索引命中
- where
DATE_FORMAT(create_time, '%Y-%m-%d') = DATE_FORMAT(CURDATE(), '%Y-%m-%d')
- where create_time >= CURDATE() and create_time < CURDATE() + interval 1 day
如果 create_time
列没有索引,仍然建议去掉对 create_time
的函数调用。原因如下:
-
全表扫描:使用
SUBSTRING
或其他函数将导致全表扫描,这会显著降低性能,因为数据库无法利用任何索引进行加速查询。 -
明确的范围条件:通过直接比较
create_time
,可以增加效率,尤其是在大量数据的情况下。使用条件create_time >= CURDATE() AND create_time < CURDATE() + INTERVAL 1 DAY
可以帮助数据库优化器更好地执行查询。
即使没有索引,去掉函数调用仍对查询性能有很大帮助。这是一个普遍的优化建议,特别是在处理大数据集时。可以在之后考虑为 create_time
列创建索引,以进一步提高查询效率。
5、数据偏移
数据偏移会导致索引失效,能想到的就是强制索引
force index (key)
6、如何定位慢查询原因?
当拿到一个慢sql,从哪里下手去定位呢?
1、看执行计划,指针是否命中?
如果没命中,结合看查询结果,是不是数据偏移?
2、如果有子查询,一层层看执行结果
如果内层查询,某些数据对外层无用。针对无用数据,想办法where添加条件,缩小查询范围
相关文章:
Java从入门到工作4 - MySQL
一:检测数据库网络 telnet 127.0.0.1 3306 注意ip和端口后之间是空格,不需要引号 二:SQL语法 1、创建结果集 SELECT 电视机 AS typeUNION SELECT 电冰箱UNION SELECT 洗衣机UNION SELECT 空调UNION SELECT 电脑UNION SELECT 热水器UNION…...

OpenShift 4 - 多云管理(2) - 配置多集群观察功能
《OpenShift / RHEL / DevSecOps 汇总目录》 本文在 OpenShift 4.17 RHACM 2.12 环境中进行验证。 文章目录 多集群观察技术架构安装多集群观察功能监控多集群的运行状态监控多集群的应用运行在被管集群监控应用运行在管理集群监控被管集群的应用运行 参考 多集群观察技术架构…...

【鸿睿创智开发板试用】RK3568 NPU的人工智能推理测试
目录 引言 驱动移植 例程编译 修改build.sh 执行编译 运行测试 部署libc的库文件 执行测试程序 结语 引言 鸿睿创智的H01开发板是基于RK3568芯片的,瑞芯微芯片的一大特色就是提供了NPU推理的支持。本文将对其NPU推理进行测试。 驱动移植 H01的开发板已经…...

iOS swift开发系列 -- tabbar问题总结
1.单视图如何改为tabbar,以便显示2个标签页 右上角➕,输入tabbar 找到控件,然后选中,把entrypoint移动到tabbar控件 2.改成tabbar,生成两个item,配置各自视图后,启动发现报错 Thread 1: “-[p…...

四、CSS3
一、CSS3简介 1、CSS3概述 CSS3 是 CSS2 的升级版本,他在CSS2的基础上,新增了很多强大的新功能,从而解决一些实际面临的问题。 CSS在未来会按照模块化的方式去发展:https://www.w3.org/Style/CSS/current-work.html …...

Three使用WebGPU的关键TSL
Three.js 使用 WebGPU 的关键 TSL TSL: three.js shader language 介绍 three.js 材质转为webgpu的关键流程, 从而引出 TSL. 1、关键类关系 WebGPURenderer|-- library: StandardNodeLibrary|-- _nodes: Nodes|-- _objects: RenderObjects|-- createRenderObject()StandardN…...
ESP32-S3模组上跑通ES8388(30)
接前一篇文章:ESP32-S3模组上跑通ES8388(29) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回终于解析完了es8388_init函数的所有代码。本回回到调用它的地方,继续往下讲解。 我们是从ESP32-S3模组上跑通ES8388(7)-CSDN博客开始进入es8388_init函数,展开对于它的解析的…...

概率论得学习和整理24:EXCEL的各种图形,统计图形
目录 0 EXCEL的各种图形,统计图形 1 统计图形 / 直方图 / 其实叫 频度图 hist最合适(用原始数据直接作图) 1.1 什么是频度图 1.2 如何创建频度图,一般是只选中1列数据(1个数组) 1.3 如何修改频度图的宽度 1.4 hist图的一个特…...
WPF中依赖属性的底层和普通属性的底层有什么不一样
WPF中依赖属性的底层 在 WPF 中,依赖属性(Dependency Property)是 WPF 属性系统的核心,它支持功能强大的特性(如数据绑定、动画、样式等)。其底层实现是围绕 DependencyObject 类展开的。以下是 WPF 中依赖…...

【Qt】drawText字体大小问题探究
背景 软件的一个功能是: 打开图片在图片上绘制序号,序号的样式是圆圈内包含数字将带有序号的图片打印出来 实现思路也很简单,在屏幕上显示时重写paintEvent函数,利用QPainter完成图片和序号的绘制。打印时只需要将QPainter对应…...

Mapbox-GL 的源码解读的一般步骤
Mapbox-GL 是一个非常优秀的二三维地理引擎,随着智能驾驶时代的到来,应用也会越来越广泛,关于mapbox-gl和其他地理引擎的详细对比(比如CesiumJS),后续有时间会加更。地理首先理解 Mapbox-GL 的源码是一项复…...

【C++】高级分析 switch 语句的应用
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯switch 语句的基本用法语法结构核心要点实例演示正确实现 期望输出错误实现错误输出 💯if 与 switch 语句的实现比较使用 if 语句使用 switch 语句比较分析 &am…...

活动预告 | Surface 来了#11:Windows 11 AI+ PC,释放 AI 办公设备的无限潜能
课程介绍 欢迎来到 Surface 来了第 11 期节目。 今年 5 月底,微软推出了专为 AI 体验而设计的全新 Windows PC 品类:Windows 11 AI PC。 微软通过 Windows 11 AI PC,进一步强调了 NPU 在运行设备端 AI 功能的重要性。并要求符合这一品类的…...

php基础:正则表达式
1.正则表达式 正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。到目前为止,我们前面所用过的精确(文本)匹配也是一种正则表达式。 在PHP中,正则表达式一般是由正规字…...
go语言压缩[]byte数据为zlib格式的时候,耗时较多,应该怎么修改?
在Go语言中使用compress/flate包来实现Zlib格式的压缩时,如果发现压缩耗时较多,可以考虑以下几个优化方向: ### 1. 压缩级别 默认情况下,compress/flate包中的NewWriter函数使用的是默认压缩级别(BestSpeed和BestComp…...

[机器学习]AdaBoost(数学原理 + 例子解释 + 代码实战)
AdaBoost AdaBoost(Adaptive Boosting)是一种Boosting算法,它通过迭代地训练弱分类器并将它们组合成一个强分类器来提高分类性能。 AdaBoost算法的特点是它能够自适应地调整样本的权重,使那些被错误分类的样本在后续的训练中得到…...

深入了解Spring
目录 Spring基础 什么是Spring框架? Spring 包含的模块有哪些? Core Container AOP Data Access/Integration Spring Web Messaging Spring Test Spring,Spring MVC,Spring Boot 之间什么关系? Spring基础 什么是Spring框架? Sp…...

jar 包如何下载
maven官网:https://mvnrepository.com/ 点击搜索,找对应搜索结果点击...

ESlint代码规范,手动与自动修复
规范说明 规则参考 - ESLint - 插件化的 JavaScript 代码检查工具 规范说明 可看到是main.js文件报错分别是第三行第30个字符,以及第七行第一个字符 后面则是规范说明,可以根据说明查找相应的规范 一.手动修正 ctrl f 可以搜索 二.自动修正 …...
利用编程获得money?
在当今数字化时代,编程技能为人们开辟了众多赚钱途径。无论你是编程新手还是经验丰富的开发者,都能在广阔的市场中找到适合自己的盈利方式。以下是一份详细的用编程赚钱指南。 一、自由职业平台 像 Upwork、Freelancer 和 Fiverr 等知名自由职业平台&am…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...