关系数据库:关系运算

news2024/11/19 15:16:40

文章目录

    • 关系运算
      • 并(Union)
      • 差(Difference)
      • 交(Intersection)
      • 笛卡尔积(Extended Cartesian Product)
      • 投影(projection)
      • 选择(Selection)
      • 除(Division)
      • 连接(join)
      • 外连接(outer join)
      • 聚集函数
    • 元组演算
    • 查询优化

关系运算

关系代数运算符有集合运算符、专门的关系运算符、算术比较符和逻辑运算符,如下:

关系代数

并(Union)

关系R与S的并由属于R或属于S的元组构成的集合组成,定义为 R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R\cup S=\{t|t\in R \vee t\in S\} RS={ttRtS},t为元组变量,R与S具有相同的关系模式(结构相同)

并
等价SQL:

SELECT A,B,C FROM R
UNION 
SELECT A,B,C FROM S;

差(Difference)

关系R与S的差由属于R但不属于S的元组构成的集合组成,定义为 R − S = { t ∣ t ∈ R ∧ t ∉ S } R - S=\{t|t\in R \wedge t\notin S\} RS={ttRt/S},t为元组变量,R与S具有相同的关系模式(结构相同)

差
等价SQL:

SELECT A,B,C FROM R
EXCEPT
SELECT A,B,C FROM S;

交(Intersection)

关系R与S的差由属于R同时又属于S的元组构成的集合组成,定义为 R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R \cap S=\{t|t\in R \wedge t\in S\} RS={ttRtS},t为元组变量,R与S具有相同的关系模式(结构相同)。也可以表示成 R ∩ S = R − ( R − S ) , 或者 R ∩ S = S − ( S − R ) R \cap S =R-(R-S), 或者R \cap S=S-(S-R) RS=R(RS),或者RS=S(SR)

交
等价SQL:

SELECT A,B,C FROM R
INTERSECT
SELECT A,B,C FROM S;

笛卡尔积(Extended Cartesian Product)

两个元数分别为n目和m目的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组,形式定义 R × S = { t ∣ t = < t n , t m > ∧ t n ∈ R ∧ t m ∈ S } R \times S=\{t|t= < t^n,t^m > \wedge t^n\in R \wedge t^m \in S \} R×S={tt=<tn,tm>tnRtmS}。其中, < t n , t m > < t^n,t^m > <tn,tm>表示元组 t n 和 t m t_n和t^m tntm拼接成的一个元组,t为元组变量。

若R有 K 1 K_1 K1个元组,S有 K 2 K_2 K2个元组,则R和S的广义笛卡尔积有 K 1 × K 2 K_1 \times K_2 K1×K2个元组。

笛卡尔积
等价SQL:

SELECT * FROM R
CROSS JOIN S;

投影(projection)

投影是从垂直方向进行运算,在关系R中选择出若干属性列A组成新的关系,形式定义为 π A ( R ) = { t ∣ t [ A ] ∣ t ∈ S } \pi_A(R) =\{t|t[A]|t\in S\} πA(R)={tt[A]tS}

投影
等价SQL:

SELECT A,C FROM R;

选择(Selection)

选择运算是从关系的水平方向进行运算,是从关系R中选择满足给定条件的诸元组,形式定义为 σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = T r u e } \sigma_F(R)=\{t|t\in R \wedge F(t)=True\} σF(R)={ttRF(t)=True}

其中,F中的运算对象是属性名(或列的序号)或常数,运算符是算术比较符(<、≤、>、≥)和逻辑运算符( ∧ 、 ∨ 、 − \wedge、\vee、- )。例如, σ 1 ≥ 6 ( R ) \sigma_{1≥6}(R) σ16(R)表示选取R关系中第1个属性值大于等于第6个属性值的元组; σ 1 > 6 ( R ) \sigma_{1>6}(R) σ1>6(R)表示选取R关系中第1个属性值大于6的元组。

选择
等价SQL:

SELECT A,B,C FROM R WHERE A>B;

除(Division)

除运算是同时从关系的水平方向和垂直方向进行运算。给定关系R(X,Y)和S(Y,Z),X、Y、Z为属性组。 R ÷ S R\div S R÷S应当满足元组在X上的分量值 x x x的象集 Y x Y_x Yx包含关系S在属性组Y上投影的集合。形式定义为 R ÷ S = { t n [ X ] ∣ t n ∈ R ∧ π y ( S ) ⊆ Y x R\div S=\{t_n[X]|t_n\in R \wedge \pi_y(S) \subseteq Y_x R÷S={tn[X]tnRπy(S)Yx

其中, Y x 为 x Y_x为x Yxx在R的象集, x = t n [ X ] x=t_n[X] x=tn[X]。且 R ÷ S R\div S R÷S的结果集的属性组为X。

示例:已知R和S的关系,求 R ÷ S R\div S R÷S

除

分析:根据定义,Y为属性CD,X为属性AB, R ÷ S R\div S R÷S应当满足元组在AB上的分量值 x x x的象集 Y x Y_x Yx包含关系S在属性组CD上投影的集合。关系S在Y上的投影为 π y ( S ) = { ( c , d ) , ( e , f ) } \pi_y(S)=\{(c,d),(e,f)\} πy(S)={(c,d),(e,f)},属性组X(即AB)可以取3个值 { ( a , b ) , ( b , d ) , ( c , k ) } \{(a,b),(b,d),(c,k)\} {(a,b),(b,d),(c,k)}

  • 象集 C D ( a , b ) = { ( c , d ) , ( e , f ) , ( h , k ) } 象集CD_{(a,b)}=\{(c,d),(e,f),(h,k)\} 象集CD(a,b)={(c,d),(e,f),(h,k)}
  • 象集 C D ( b , d ) = { ( e , f ) , ( d , l ) } 象集CD_{(b,d)}=\{(e,f),(d,l)\} 象集CD(b,d)={(e,f),(d,l)}
  • 象集 C D ( c , k ) = { ( c , d ) , ( e , f ) } 象集CD_{(c,k)}=\{(c,d),(e,f)\} 象集CD(c,k)={(c,d),(e,f)}

由于上述象集包含 π y ( S ) 有 { ( a , b ) } 和 { ( c , k ) } \pi_y(S)有\{(a,b)\}和\{(c,k)\} πy(S){(a,b)}{(c,k)},所以 R ÷ S = { ( a , b ) , { ( c , k ) } R\div S=\{(a,b),\{(c,k)\} R÷S={(a,b),{(c,k)}$

连接(join)

  1. θ \theta θ连接

θ \theta θ连接是从R与S的笛卡尔积中选取属性间满足一定条件的元组,形式定义:

R ⋈ X θ Y S = { t ∣ t = < t n , t m > ∧ t n ∈ R ∧ t m ∈ S ∧ t n [ X ] θ t m [ Y ] } R \bowtie_{X\theta Y}S=\{t|t= < t^n,t^m > \wedge t^n \in R \wedge t^m \in S \wedge t^n[X] \theta t^m[Y]\} RYS={tt=<tn,tm>tnRtmStn[X]θtm[Y]}

其中, X θ Y X\theta Y Y为连接的条件, θ \theta θ是比较运算符,X和Y分别为R和S上度数相等,且可比的属性组。 t n [ X ] t^n[X] tn[X]表示R中 t n t^n tn元组的对应于属性X的一个分量。 t n [ Y ] t^n[Y] tn[Y]表示R中 t m t^m tm元组的对应于属性Y的一个分量。

还可以表示为 R ⋈ X θ Y S = σ X θ Y ( R × S ) R \bowtie_{X\theta Y}S=\sigma_{X\theta Y}(R\times S) RYS=σY(R×S)或者 R ⋈ i θ j S = σ i θ ( i + j ) ( R × S ) R \bowtie_{i\theta j}S=\sigma_{i\theta (i+j)}(R\times S) RiθjS=σiθ(i+j)(R×S)

连接
等价SQL:

SELECT * FROM R
CROSS JOIN S
WHERE R.A<S.B;
  1. 等值连接

θ \theta θ为“=”时,称为等值连接,形式定义为 R ⋈ X = Y S = { t ∣ t = < t n , t m > ∧ t n ∈ R ∧ t m ∈ S ∧ t n [ X ] = t m [ Y ] } R \bowtie_{X= Y}S=\{t|t= < t^n,t^m > \wedge t^n \in R \wedge t^m \in S \wedge t^n[X] = t^m[Y]\} RX=YS={tt=<tn,tm>tnRtmStn[X]=tm[Y]}

  1. 自然连接

自然连接时一种特殊的等值连接,要求两个关系中进行比较的分量必须是相同的属性组,并且在结果集中将重复属性去掉。形式定义:

R ⋈ S = { t ∣ t = < t n , t m ∗ > ∧ t n ∈ R ∧ t m ∈ S ∧ S . B 1 = R . B 1 ∧ R . B 2 = S . B 2 ∧ . . . ∧ R . B n = S . B n } R \bowtie_S=\{t|t= < t^n,t^{m^\ast} > \wedge t^n \in R \wedge t^m \in S \wedge S.B_1=R.B_1\wedge R.B_2=S.B_2\wedge ... \wedge R.B_n=S.B_n \} RS={tt=<tn,tm>tnRtmSS.B1=R.B1R.B2=S.B2...R.Bn=S.Bn}

其中 t n t_n tn表示关系R的元组变量, t m t_m tm表示关系S的元组变量。R和S具有相同的属性组B,且 B = ( B 1 , B 2 , . . . , B k ) B=(B_1,B_2,...,B_k) B=(B1,B2,...,Bk)。假定R的属性为 A 1 , A 2 , . . . , A n − k , B 1 , B 2 , . . . , B k A_1,A_2,...,A_{n-k},B_1,B_2,...,B_k A1,A2,...,Ank,B1,B2,...,Bk,假定S的属性为 B 1 , B 2 , . . . , B k , B k + 1 , B k + 2 , . . . , B m B_1,B_2,...,B_k,B_{k+1},B_{k+2},...,B_m B1,B2,...,Bk,Bk+1,Bk+2,...,Bm,S的元组变量去除重复属性B所组成新的元组为 t m ∗ t^{m^\ast} tm

自然连接
等价SQL:

SELECT R.A,R.B,R.C,R.D
FROM R,S 
WHERE R.A=S.A AND R.C=S.C;

要求两个关系中进行比较的分量必须是相同的属性组并且在结果集中将重复属性列去掉。

外连接(outer join)

外连接是连接运算的扩展,可以处理缺失的信息。

外连接

  • 左外连接(left outer join)。取出左侧关系中所有与右侧关系中任一元组都不匹配的元组,用空值null填充所有来自右侧关系的属性。

等价SQL:

SELECT R.A,R.B,R.C,S.D
FROM R
LEFT JOIN S 
ON R.B=S.B AND R.C=S.C;
  • 右外连接(right outer join)。取出右侧关系中所有与左侧关系中任一元组都不匹配的元组,用空值null填充所有来自左侧关系的属性。

等价SQL:

SELECT R.A,S.B,S.C,S.D
FROM R
RIGHT JOIN S 
ON R.B=S.B AND R.C=S.C;
  • 完全外连接(full outer join)。完成左外连接和右外连接的操作。既填充左侧关系中所有与右侧关系中任一元组都不匹配的元组,又填充右侧关系中所有与左侧关系中任一元组都不匹配的元组,将产生的新元组加入自然连接的结果中。

等价SQL:

SELECT R.A,R.B,R.C,S.D
FROM R
LEFT JOIN S 
ON R.B=S.B AND R.C=S.C
UNION 
SELECT R.A,S.B,S.C,S.D
FROM R
RIGHT JOIN S 
ON R.B=S.B AND R.C=S.C;

聚集函数

聚集函数输入一个值的集合,返回单一值作为结果。如集合12,4,6,8,10,15}。将聚集函数sum用于该集合时返回和45;将聚集函数avg用于该集合时返回平均值7.5;将聚集函数count用于该集合时返回集合中元数的个数6;将聚集函数min用于该集合时返回最小值2;将聚集函数max用于该集合时返回最大值15。

元组演算

表现形式为 { t ∣ P ( t ) } \{t|P(t)\} {tP(t)}。其中,t是元组变量, P ( t ) P(t) P(t) 是元组关系演算公式,公式是由原子公式组成的。

原子公式有如下三种形式:

  1. R ( t ) R(t) R(t)。R是关系名,t是元组变量,表示命题为“t是关系R的一个元组”。
  2. t [ i ] θ C 或 C θ t [ i ] t[i]\theta C 或C\theta t[i] t[i]θCCθt[i] t [ i ] t[i] t[i]表示元组变量t的第i个分量,C是常量, θ \theta θ为算术比较运算符。表示命题为“元组变量t的第i个分量与C直接满足 θ \theta θ运算“。如 t [ 3 ] < ′ 8 ′ t[3]<'8' t[3]<8表示t的第三个分量小于8。
  3. t [ i ] θ u [ j ] t[i]\theta u[j] t[i]θu[j]。t、u是两个元组变量,表示命题为“元组变量t的第i个分量与元组变量u的第j个分量直接满足 θ \theta θ运算”。如 t [ 2 ] ≥ u [ 4 ] t[2]\geq u[4] t[2]u[4]表示t的第二个分量大于等于u的第四个分量。

若一个公式中的一个元组变量前有全称量词 ∀ \forall 或存在量词 ∃ \exists 符号,则称该变量为约束变量,否则称之为自由变量。公式可递归定义:

  • 原子公式是公式。
  • 如果是 φ 1 \varphi_1 φ1 φ 2 \varphi_2 φ2公式,那么, ¬ φ 1 、 φ 1 ∨ φ 2 、 φ 1 ∧ φ 2 、 φ 1 ⇒ φ 2 \lnot \varphi_1、\varphi_1 \vee \varphi_2、\varphi_1 \wedge \varphi_2、\varphi_1 \Rightarrow \varphi_2 ¬φ1φ1φ2φ1φ2φ1φ2 也都是公式。分别表示命题: ¬ φ 1 \lnot \varphi_1 ¬φ1表示“ φ 1 \varphi_1 φ1不是真“; φ 1 ∨ φ 2 \varphi_1 \vee \varphi_2 φ1φ2表示“ φ 1 \varphi_1 φ1 φ 2 \varphi_2 φ2 φ 1 和 φ 2 \varphi_1和\varphi_2 φ1φ2为真”; φ 1 ∧ φ 2 \varphi_1 \wedge \varphi_2 φ1φ2表示“ φ 1 \varphi_1 φ1 φ 2 \varphi_2 φ2都为真”; φ 1 ⇒ φ 2 \varphi_1 \Rightarrow \varphi_2 φ1φ2表示“若 φ 1 \varphi_1 φ1为真则 φ 2 \varphi_2 φ2为真”。
  • 如果是 φ 1 \varphi_1 φ1公式,那么, ∃ t ( φ 1 ) \exists t(\varphi_1) t(φ1)是公式。表示命题为“若有一个t使 φ 1 \varphi_1 φ1为真,则 ∃ t ( φ 1 ) \exists t(\varphi_1) t(φ1)为真,否则 ∃ t ( φ 1 ) \exists t(\varphi_1) t(φ1)为假”。
  • 如果是 φ 1 \varphi_1 φ1公式,那么, ∀ t ( φ 1 ) \forall t(\varphi_1) t(φ1)是公式。表示命题为“若对所有t使 φ 1 \varphi_1 φ1为真,则 ∀ t ( φ 1 ) \forall t(\varphi_1) t(φ1)为真,否则 ∀ t ( φ 1 ) \forall t(\varphi_1) t(φ1)为假”。

公式中运算符优先级(低到高):算术比较运算符 θ \theta θ ∃ \exists ∀ \forall ¬ \lnot ¬ ∧ \wedge ∨ \vee ⇒ \Rightarrow 。加括号时,括号中的运算符优先。

关系代数转化为元组演算:

  1. 并。 R ∪ S = { t ∣ R ( t ) ∨ S ( t ) } R\cup S=\{t|R(t) \vee S(t)\} RS={tR(t)S(t)}
  2. 差。 R − S = { t ∣ R ( t ) ∧ ¬ S ( t ) } R - S=\{t|R(t) \wedge \lnot S(t)\} RS={tR(t)¬S(t)}
  3. 笛卡尔积。 R × S = { t ∣ ( ∃ u ) ( ∃ v ) ( R ( u ) ∧ S ( v ) ∧ t [ 1 ] = u [ 1 ] ∧ . . . ∧ t [ n ] = u [ n ] ∧ t [ n + 1 ] = v [ 1 ] ∧ . . . ∧ t [ n + m ] = v [ m ] ) } R \times S=\{t|(\exists u)(\exists v)(R(u)\wedge S(v)\wedge t[1]=u[1]\wedge ... \wedge t[n]=u[n]\wedge t[n+1]=v[1]\wedge ... \wedge t[n+m]=v[m])\} R×S={t(u)(v)(R(u)S(v)t[1]=u[1]...t[n]=u[n]t[n+1]=v[1]...t[n+m]=v[m])}
  4. 投影。 π i 1 , i 2 , . . . , i k ( R ) = { t ∣ ( ∃ u ) ( R ( u ) ∧ t [ 1 ] = u [ i 1 ] ∧ t [ 2 ] = u [ i 2 ] ∧ . . . ∧ t [ k ] = u [ i k ] } \pi_{i_1,i_2,...,i_k}(R) =\{t|(\exists u)(R(u)\wedge t[1]=u[i_1]\wedge t[2]=u[i_2]\wedge ... \wedge t[k]=u[i_k]\} πi1,i2,...,ik(R)={t(u)(R(u)t[1]=u[i1]t[2]=u[i2]...t[k]=u[ik]}
  5. 选择。 σ F ( R ) = { t ∣ R ( t ) ∧ F } \sigma_F(R)=\{t|R(t) \wedge F\} σF(R)={tR(t)F}

查询优化

查询处理是从数据库中提取数据的一系列活动。
查询处理的代价:总代价=I/O代价+CPU代价+内存代价(多用户环境)。
查询优化:为查询选择最有效的查询计划的过程。

优化的准则:

  • 提早执行选取运算。
  • 合并乘积与其后的选择运算为连接运算。
  • 将投影运算与其后的其他运算同时进行,以避免重复扫描关系。
  • 将投影运算和其前后的二木运算结合起来,使得没有必要为去掉某些字段再扫描一遍关系。
  • 在执行连接前对关系做适当的预处理,就能快速地找到要连接的元组。方法有两种:索引连接法、排序合并连接法。
  • 存储公共子表达式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1720637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Linux]vsftp配置大全---超完整版

[Linux]vsftp配置大全---超完整版 以下文章介绍Liunx 环境下vsftpd的三种实现方法 一、前言 Vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器&#xff0c;目前已经被许多大型站点所采用&#xff0c;如ftp.redhat.com,ftp.kde.org,ftp.gnome.org.等。…

switch语句

作用 让顺序执行的代码&#xff0c;产生分支。 基本语法 switch(变量) {//变量 常量 执行 case和 break之间的代码case 常量:满足条件执行的代码逻辑;break;case 常量:满足条件执行的代码逻辑;break;//case 可以有无数个default://如果上面case的条件都不满足 就会执行 def…

js四舍五入和计算精度问题处理

js四舍五入和计算精度问题处理 目录 js四舍五入和计算精度问题处理错误计算方法示例代码 js中加减乘除&#xff0c;部分数据会存在计算不准确。 错误计算 我使用的是big.js&#xff0c;基于big.js库封装了下工具方法&#xff0c;当然也可以用其他库&#xff0c;如mathjs/bignu…

【学习笔记】计算机组成原理(九+十)

控制单元的功能 文章目录 控制单元的功能9.1 微操作命令的分析9.1.1 取指周期9.1.2 间址周期9.1.3 执行周期9.1.4 中断周期 9.2 控制单元的功能9.2.1 控制单元的外特性9.2.2 控制信号举例9.2.3 多级时序系统9.2.4 控制方式 控制单元的设计10.1 组合逻辑设计10.1.1 组合逻辑控制…

04-树5 Root of AVL Tree(浙大数据结构PTA习题)

04-树5 Root of AVL Tree 分数 25 作者 陈越 单位 浙江大学 An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more th…

Matlab|基于粒子群算法优化Kmeans聚类的居民用电行为分析

目录 主要内容 部分代码 结果一览 下载链接 主要内容 在我们研究电力系统优化调度模型的过程中&#xff0c;由于每天负荷和分布式电源出力随机性和不确定性&#xff0c;可能会优化出很多的结果&#xff0c;但是经济调度模型试图做到通用策略&#xff0c;同样的策…

Java-集合基础

集合 一、含义 集合是Java API所提供的一系列类&#xff0c;可以用于动态存放多个对象 (集合只能存对象)集合与数组的不同在于&#xff0c;集合是大小可变的序列&#xff0c;而且元素类型可以不受限定&#xff0c;只要是引用类型。(集合中不能放基本数据类型&#xff0c;但可以…

WPF Binding对象

在WinForm中&#xff0c;我们要想对控件赋值&#xff0c;需要在后台代码中拿到控件对象进行操作&#xff0c;这种赋值形式&#xff0c;从根本上是无法实现界面与逻辑分离的。 在WPF中&#xff0c;微软引入了Binding对象&#xff0c;通过Binding&#xff0c;我们可以直接将控件与…

从零开始利用MATLAB进行FPGA设计(七)用ADC采集信号教程2

黑金的教程做的实在太拉闸了&#xff0c;于是自己摸索信号采集模块的使用方法。 ADC模块&#xff1a;AN9238 FPGA开发板&#xff1a;AX7020&#xff1b;Xilinx 公司的 Zynq7000 系列的芯片XC7Z020-2CLG400I&#xff0c;400引脚 FBGA 封装。 往期回顾&#xff1a; 从零开始利…

【易错题】数据统计补充习题(选择题 )#CDA Level 1

本文整理了数据统计相关的易错题&#xff0c;部分可作为备考CDA Level 1统计学部分的补充习题。来源&#xff1a;如荷学题库&#xff08;CFDP第三部分&#xff09; 1&#xff09; 2&#xff09; 3&#xff09; 4&#xff09; 5&#xff09; 6&#xff09; 7&#xff09; 8&…

解决Mac ~/.bash_profile 配置的环境变量重启终端后失效问题

在Mac系统中&#xff0c;配置环境变量通常是在~/.bash_profile文件中进行。然而&#xff0c;有时会遇到配置的环境变量在重启终端后失效的问题。 解决办法&#xff1a; 在~/.zshrc文件最后或最前面&#xff0c;增加一行 source ~/.bash_profile

记一次netty客户端的开发

背景 近日要开发一个tcp客户端程序去对接上游厂商的数据源&#xff0c;决定使用netty去处理&#xff0c;由于很久没有开发过netty了&#xff0c;顺便学习记录下 netty搭建 考虑到我们需要多个client去对接server服务&#xff0c;所以我们定义一个公共的AbstractNettyClient父…

RAID技术迭代、原理对比、产品梳理(HCIA)

目录 一、RAID技术迭代 传统RAID LUN虚拟化2.0 工作原理&#xff1a; 块虚拟化2.0 为什么有RAID2.0&#xff1f; RAID2.0实现原理&#xff1a; RAID-TPRAID 7 华为RAID-TP技术 RAID的4种工作状态 RAID算法 普通RAID算法 华为动态RAID算法 保险箱盘&#xff08;存掉…

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 阅读笔记

这才是真正RAG&#xff0c;如果只是把检索得到结果放到prompt里面&#xff0c;可能够呛。 好久没有读paper了&#xff0c;最近因为有个小工作&#xff0c;来读一篇较早提出来RAG想法的文章吧。这篇文章是Facebook、伦敦大学学院以及纽约大学的研究者们搞出来的。文章首先指出&a…

8-异常与错误

8-异常与错误 1、简介2、异常处理2.1 抛出异常2.2 捕获异常2.3 匹配顺序 3、异常说明4、构造函数中的异常5、析构函数中的异常6、标准库异常 1、简介 在程序编码过程中难免会出现错误&#xff0c;主要有&#xff1a;语法错误、逻辑错误、功能错误等&#xff0c;当我们面对以上…

SpringBoot打war包并配置外部Tomcat运行

简介 由于其他原因&#xff0c;我们需要使用SpringBoot打成war包放在外部的Tomcat中运行,本文就以一个案例来说明从SpringBoot打war包到Tomcat配置并运行的全流程经过 环境 SpringBoot 2.6.15 Tomcat 8.5.100 JDK 1.8.0_281 Windows 正文 一、SpringBoot配置打war包 第一步&a…

echarts 图表不显示的问题

是这样的&#xff0c;点击详情&#xff0c;再点击统计&#xff0c;切换的时候就不会显示echarts图表&#xff0c;刚开始使用的是next Tick&#xff0c;没有使用定时器&#xff0c;后来加上了定时器就实现了如下所示&#xff1a; 代码是如下 const chartContainer ref(null); …

开发一个SDK(starter)

1.创建项目 将pom.xml中build删除掉

pikachu靶场(unsafe upfileupload(文件上传)通关教程)

目录 client check 1.在桌面新建一个文本文档 2.保存为.png格式 3.打开网站 4.按照图中操作 5.点击forward 6.访问 MIME type 1.新建一个php文件&#xff0c;里面写上 2.上传文件&#xff0c;就是我们保存的文件 3.打开抓包工具&#xff0c;点击开始上传 4.修改Conen…

服务器主板电池

一、什么是服务器纽扣电池&#xff1f; 服务器纽扣电池&#xff0c;也叫CMOS电池&#xff0c;是一种非常小型的电池&#xff0c;通常与服务器主板上的CMOS芯片相结合&#xff0c;用于储存BIOS设置、时钟和其他关键系统信息。这种电池的体积通常比一枚硬币还小&#xff0c;而且…