【openGauss实战5】表管理及CURD

news2024/10/6 10:31:40

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 📣 1.创建数据库
      • ✨ 1.1 语法格式
      • ✨ 1.2 案例示例
    • 📣 2.创建表
      • ✨ 2.1 语法格式
      • ✨ 2.2 案例示例
    • 📣 3.DML语句
      • ✨ 3.1 INSERT
      • ✨ 3.2 UPDATE
      • ✨ 3.3 DELETE
    • 📣 4.SELECT语句
      • ✨ 4.1 语法格式
      • ✨ 4.2 案例示范
    • 📣 5.WHERE子句
      • ✨ 5.1 语法格式
      • ✨ 5.2 案例示范
    • 📣 6.ORDER BY子句
      • ✨ 6.1 语法格式
      • ✨ 6.2 案例示范
    • 📣 7.DISTINCT
      • ✨ 7.1 语法格式
      • ✨ 7.2 案例示范
    • 📣 8.GROUP BY子句
      • ✨ 8.1 语法格式
      • ✨ 8.2 案例示范
    • 📣 9.HAVING子句
      • ✨ 9.1 语法格式
      • ✨ 9.2 案例示范

前言

本篇介绍了openGauss数据库初级管理,包括创建数据库、DML语句及常用的SQL检索等

📣 1.创建数据库

数据库安装完成后,默认生成名称为postgres的数据库。您需要自己创建一个新的数据库。

在这里插入图片描述

✨ 1.1 语法格式

##创建数据库
CREATE DATABASE database_name;

##查看数据库
使用“\l”用于查看已经存在的数据库。
openGauss-# \l

使用 “\c + 数据库名” 进入已存在数据库。
openGauss-# \c test

##修改数据库
ALTER DATABASE database_name RENAME TO new_name;

##删除数据库
DROP DATABASE database_name ;

📢📢📢 参数说明
database_name:要创建、修改或者删除的数据库名称
new_name:数据库的新名称

✨ 1.2 案例示例

1)创建一个新的数据库mesdb
test=# CREATE DATABASE mesdb;
2)使用“\l”用于查看已经存在的数据库。
test=# \l
3)使用 “\c + 数据库名” 来进入mesdb数据库。
test=# \c mesdb
4)切换数据库为postgres数据库
mesdb=# \c postgres
5)将mesdb数据库名称修改为jeamesdb。
openGauss=# ALTER DATABASE mesdb RENAME TO jeamesdb;
6)删除数据库jeamesdb。
openGauss=# DROP DATABASE jeamesdb;

在这里插入图片描述

📣 2.创建表

在不同的数据库中可以存放相同的表。您可以使用CREATE TABLE语句创建表,该表由命令执行者所有

✨ 2.1 语法格式

CREATE TABLE table_name (column_name data_type [, ... ]);

📢📢📢 参数说明:
table_name:要创建的表名。
column_name:新表中要创建的字段名。
data_type:字段的数据类型。

✨ 2.2 案例示例

##创建表
test=# CREATE TABLE customer_t
(  
  customer_sk             integer,   
  customer_id             char(5),    
  first_name              char(6),    
  last_name               char(8), 
 Primary key (customer_id)
) ;

##查看表
test=# \d
                                  List of relations
 Schema |         Name          |   Type   | Owner |             Storage              
--------+-----------------------+----------+-------+----------------------------------
 public | customer_t            | table    | omm   | {orientation=row,compression=no}
 public | smallserial_tab       | table    | omm   | {orientation=row,compression=no}
 public | smallserial_tab_a_seq | sequence | omm   | 
 public | t1                    | table    | mesdb | {orientation=row,compression=no}
(4 rows)

## 查看表的结构
test=# \d customer_t
       Table "public.customer_t"
   Column    |     Type     | Modifiers 
-------------+--------------+-----------
 customer_sk | integer      | 
 customer_id | character(5) | not null
 first_name  | character(6) | 
 last_name   | character(8) | 
Indexes:
    "customer_t_pkey" PRIMARY KEY, btree (customer_id) TABLESPACE pg_default

##插入数据
test=# INSERT INTO customer_t (customer_sk, customer_id, first_name,last_name) 
VALUES (3769, 5, 'Grace','White');

在这里插入图片描述

📣 3.DML语句

✨ 3.1 INSERT

INSERT INTO语句用于向表中插入新记录。该语句可以插入一行数据也可以同时插入多行数据

📢📢📢 语法格式

INSERT INTO table_name [ ( column_name [, …] ) ]
{ DEFAULT VALUES
| VALUES {( { expression | DEFAULT } [, …] ) }[, …] };
参数说明:
table_name:要插入数据的目标表名。
column_name:目标表中的字段名
1)字段名可以有子字段名或者数组下标修饰。
2)没有在字段列表中出现的每个字段,将由系统默认值,或者声明时的默认值填充,若都没有则用NULL填充。例如,向一个复合类型中的某些字段插入数据的话,其他字段将是NULL。
3)目标字段(column_name)可以按顺序排列。如果没有列出任何字段,则默认全部字段,且顺序为表声明时的顺序。
4)如果value子句只提供了N个字段,则目标字段为前N个字段。
5)value子句提供的值在表中从左到右关联到对应列。
expression:赋予对应column的一个有效表达式或值
1)向表中字段插入单引号 " ’ “时需要使用单引号自身进行转义。
2)如果插入行的表达式不是正确的数据类型,系统试图进行类型转换,若转换不成功,则插入数据失败,系统返回错误信息。
DEFAULT:对应字段名的缺省值。如果没有缺省值,则为NULL

📢📢📢 案例示范

1)数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。
test=# INSERT INTO customer_t(customer_sk, customer_id, first_name) VALUES (3769, 'hello', 'Grace');

2)已经知道表中字段的顺序,也可无需列出表中的字段
test=# INSERT INTO customer_t VALUES (3770, 'it', 'Grace',DEFAULT);

3)字段可以忽略其中的一些,没有数值的字段将被填充为字段的缺省值
test=# INSERT INTO customer_t (customer_sk, customer_id,first_name) VALUES (3771, 'jem','Grace');

4)表中插入多行,请使用以下命令
test=# INSERT INTO customer_t (customer_sk, customer_id, first_name) VALUES
    (6885, 'maps', 'Joes'),
    (4321, 'tpcds', 'Lily'),
    (9527, 'world', 'James');

test=# select * from customer_t;
 customer_sk | customer_id | first_name | last_name 
-------------+-------------+------------+-----------
        3769 | 5           | Grace      | White   
        3769 | hello       | Grace      | 
        3770 | it          | Grace      | 
        3771 | jem         | Grace      | 
        6885 | maps        | Joes       | 
        4321 | tpcds       | Lily       | 
        9527 | world       | James      | 

✨ 3.2 UPDATE

UPDATE修改满足条件的所有行中指定的字段值,WHERE子句声明条件,SET子句指定的字段会被修改,没有出现的字段保持它们的原值。

📢📢📢 语法格式

UPDATE table_name
SET column_name = { expression | DEFAULT }
[WHERE condition ];
参数说明:
table_name:要更新的表名,可以使用模式修饰,例如myshcema.table
expression:赋给字段的值或表达式
column_name:要修改的字段名
condition:一个返回Boolean类型结果的表达式,只有这个表达式返回true的行才会被更新。

📢📢📢 案例示范

1)将表customer_t中customer_sk为9527的地域重新定义为9876。
test=# UPDATE customer_t SET customer_sk = 9876 WHERE customer_sk = 9527;
test=# select * from customer_t;
 customer_sk | customer_id | first_name | last_name 
-------------+-------------+------------+-----------
        3769 | 5           | Grace      | White   
        3769 | hello       | Grace      | 
        3770 | it          | Grace      | 
        3771 | jem         | Grace      | 
        6885 | maps        | Joes       | 
        4321 | tpcds       | Lily       | 
        9876 | world       | James      | 
        
2)把表customer_t所有customer_sk的值增加100:
test=# UPDATE customer_t SET customer_sk = customer_sk + 100;

test=# select * from customer_t;
 customer_sk | customer_id | first_name | last_name 
-------------+-------------+------------+-----------
        3869 | 5           | Grace      | White   
        3869 | hello       | Grace      | 
        3870 | it          | Grace      | 
        3871 | jem         | Grace      | 
        6985 | maps        | Joes       | 
        4421 | tpcds       | Lily       | 
        9976 | world       | James      | 

3)可以在一个UPDATE命令中更新更多的字段,方法是在SET子句中列出更多赋值
test=# UPDATE customer_t SET customer_id = 'Admin', first_name = 'Local' WHERE customer_sk = 4421;

test=# select * from customer_t;
 customer_sk | customer_id | first_name | last_name 
-------------+-------------+------------+-----------
        3869 | 5           | Grace      | White   
        3869 | hello       | Grace      | 
        3870 | it          | Grace      | 
        3871 | jem         | Grace      | 
        6985 | maps        | Joes       | 
        9976 | world       | James      | 
        4421 | Admin       | Local      | 

✨ 3.3 DELETE

DELETE语句可以从指定的表里删除满足WHERE子句的行。如果WHERE子句不存在,将删除表中所有行,只保留表结构。

📢📢📢 语法格式

DELETE FROM table_name [WHERE condition];
参数说明:
table_name:目标表的名称(可以有模式修饰)
condition:一个返回Boolean值的表达式,用于判断哪些行需要被删除

📢📢📢 案例示范

1)创建表customer_t_bak,表的结构、数据与customer_t一致
test=# CREATE TABLE customer_t_bak AS TABLE customer_t;

--创建的表customer_t_bak,数据如下:
test=# select * from customer_t_bak;
 customer_sk | customer_id | first_name | last_name 
-------------+-------------+------------+-----------
        3869 | 5           | Grace      | White   
        3869 | hello       | Grace      | 
        3870 | it          | Grace      | 
        3871 | jem         | Grace      | 
        6985 | maps        | Joes       | 
        9976 | world       | James      | 
        4421 | Admin       | Local      | 

2)删除customer_t_bak中c_customer_sk等于3869的职员
test=# DELETE FROM customer_t_bak WHERE customer_sk = 3869;

--可以看到customer_sk等于3869的行已经被删除。
test=# select * from customer_t_bak;
 customer_sk | customer_id | first_name | last_name 
-------------+-------------+------------+-----------
        3870 | it          | Grace      | 
        3871 | jem         | Grace      | 
        6985 | maps        | Joes       | 
        9976 | world       | James      | 
        4421 | Admin       | Local      | 

3)默认删除整张表的数据,仅保留表结构
test=# DELETE FROM customer_t_bak;

test=# select * from customer_t_bak;
 customer_sk | customer_id | first_name | last_name 
-------------+-------------+------------+-----------
(0 rows)

📣 4.SELECT语句

SELECT语句用于从表或视图中取出数据,结果被存储在一个结果表中,称为结果集。
SELECT语句就像叠加在数据库表上的过滤器,利用SQL关键字从数据表中过滤出用户需要的数据。

✨ 4.1 语法格式

SELECT
{ * | [column, …] }
[ FROM from_item [, …] ];
参数说明:
1)指定查询表中列名,可以是部分列或者是全部,通配符*表示全部列。
列名可以用下面两种形式表达:
A.手动输入列名,多个列之间用英文逗号(,)分隔。
B.可以是FROM子句里面计算出来的字段。
2)FROM子句
为SELECT声明一个或者多个源表。FROM子句涉及多个元素,常见元素如下
A.table_name
表名或视图名,名称前可加上模式名,如:schema_name.table_name。表名为最常见的元素。
B.subquery
FROM子句中可以出现子查询,创建一个临时表保存子查询的输出
C.alias
给表或复杂的表引用起一个临时的表别名,以便被其余的查询引用
D.join_type
在openGauss中,JOIN有五种连接类型:
CROSS JOIN :交叉连接
INNER JOIN:内连接
LEFT OUTER JOIN:左外连接
RIGHT OUTER JOIN:右外连接
FULL OUTER JOIN:全外连接

✨ 4.2 案例示范

1.读取表customer_t中所有的数据
test=# SELECT * FROM customer_t;
 customer_sk | customer_id | first_name | last_name 
-------------+-------------+------------+-----------
        3869 | 5           | Grace      | White   
        3869 | hello       | Grace      | 
        3870 | it          | Grace      | 
        3871 | jem         | Grace      | 
        6985 | maps        | Joes       | 
        9976 | world       | James      | 
        4421 | Admin       | Local      | 
        
2.读取表customer_t中指定字段customer_sk、customer_id。
test=# SELECT customer_sk,customer_id FROM customer_t;
 customer_sk | customer_id 
-------------+-------------
        3869 | 5    
        3869 | hello
        3870 | it   
        3871 | jem  
        6985 | maps 
        9976 | world
        4421 | Admin

📣 5.WHERE子句

WHERE子句构成一个行选择表达式,用于指定条件而获取的数据,如果给定的条件满足,才返回从表中的具体数值.

✨ 5.1 语法格式

SELECT
{ * | [column, …] }
[ FROM from_item [, …] ]
[ WHERE condition ];
参数说明:
WHERE子句:在WHERE子句中可以使用比较运算符或逻辑运算符,例如 >, <, =, LIKE, NOT 等等。
condition:condition是返回值为布尔型的任意表达式,任何不满足该条件的行都不会被检索。

✨ 5.2 案例示范

1.找到customer_id为hello且customer_sk为3869的行。
test=# SELECT * FROM customer_t WHERE  customer_sk = 3869 AND customer_id = 'hello';

2.找到customer_sk大于6985或者customer_id为hello的行。
test=# SELECT * FROM customer_t WHERE  customer_sk > 6985 OR customer_id = 'hello';

3.找到customer_t中last_name字段不为空的行。
test=# SELECT * FROM customer_t WHERE  last_name IS NOT NULL;

4.找到customer_sk在4000和9000之间的行。
test=# SELECT * FROM customer_t WHERE  customer_sk  BETWEEN 4000 AND 9000;

在这里插入图片描述

📣 6.ORDER BY子句

ORDER BY对对SELECT语句检索得到的一列或者多列数据进行升序(ASC)或者降序(DESC)排列。

✨ 6.1 语法格式

SELECT
{ * | [column, …] }
[ FROM from_item [, …] ]
[ ORDER BY {expression [ ASC | DESC ] }];
参数说明:
对SELECT语句检索得到的数据进行升序或降序排序,对于ORDER BY表达式中包含多列的情况:
1)首先根据最左边的列进行排序,如果这一列的值相同,则根据下一个表达式进行比较,依此类推。
2)如果对于所有声明的表达式都相同,则按随机顺序返回。

✨ 6.2 案例示范

1.对结果根据customer_sk字段值进行升序排列。
test=# SELECT * FROM customer_t ORDER BY customer_sk ASC;
 customer_sk | customer_id | first_name | last_name 
-------------+-------------+------------+-----------
        3869 | 5           | Grace      | White   
        3869 | hello       | Grace      | 
        3870 | it          | Grace      | 
        3871 | jem         | Grace      | 
        4421 | Admin       | Local      | 
        6985 | maps        | Joes       | 
        9976 | world       | James      | 
        
2.对结果根据customer_sk字段值进行降序,first_name升序排列。
test=# SELECT * FROM customer_t ORDER BY customer_sk DESC,first_name ;
 customer_sk | customer_id | first_name | last_name 
-------------+-------------+------------+-----------
        9976 | world       | James      | 
        6985 | maps        | Joes       | 
        4421 | Admin       | Local      | 
        3871 | jem         | Grace      | 
        3870 | it          | Grace      | 
        3869 | 5           | Grace      | White   
        3869 | hello       | Grace      | 

📣 7.DISTINCT

DISTINCT关键字与SELECT语句一起使用,用于去除重复记录,只获取唯一的记录。

✨ 7.1 语法格式

SELECT DISTINCT [ ON ( expression [, …] ) ] ]
{ * | [column, …] }
[ FROM from_item [, …] ];
参数说明:
ON ( expression [, …] ) 只保留那些在给出的表达式上运算出相同结果的行集合中的第一行。

✨ 7.2 案例示范

在表customer_t中插入两条数据:
test=# INSERT INTO customer_t (customer_sk, customer_id, first_name) VALUES
    (6881, 'test', 'Lily'),
    (4320, 'tpcds', 'Lily');

test=# select * from customer_t;
 customer_sk | customer_id | first_name | last_name 
-------------+-------------+------------+-----------
        3869 | 5           | Grace      | White   
        3869 | hello       | Grace      | 
        3870 | it          | Grace      | 
        3871 | jem         | Grace      | 
        6985 | maps        | Joes       | 
        9976 | world       | James      | 
        4421 | Admin       | Local      | 
        6881 | test        | Lily       | 
        4320 | tpcds       | Lily       | 

在SELECT语句中使用DISTINCT关键字,对first_name字段去重
test=# select distinct first_name from customer_t;
 first_name 
------------
 James 
 Grace 
 Local 
 Joes  
 Lily  

📣 8.GROUP BY子句

GROUP BY语句和SELECT语句一起使用,用来对相同的数据进行分组。您可以对一列或者多列进行分组,但是被分组的列必须存在。

✨ 8.1 语法格式

SELECT
{ * | [column, ...] }
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY grouping_element [, ...] ]
[ ORDER BY {expression [ ASC | DESC ] }];
参数说明:
1)将查询结果按某一列或多列的值分组,值相等的为一组。
2)GROUP BY在一个SELECT语句中,放在WHRER子句的后面,ORDER BY 句的前面。

✨ 8.2 案例示范

1.表customer_t中存在重复的first_name,根据first_name字段分组,并计数。
test=# SELECT first_name, count(*)  FROM customer_t GROUP BY first_name;
 first_name | count 
------------+-------
 James      |     1
 Grace      |     4
 Local      |     1
 Joes       |     1
 Lily       |     2

📣 9.HAVING子句

WHERE子句在所选列上设置条件,而HAVING子句则在由GROUP BY子句创建的分组上设置条件。

✨ 9.1 语法格式

SELECT
{ * | [column, …] }
[ FROM from_item [, …] ]
[ WHERE condition ]
[ GROUP BY grouping_element [, …] ]
[ HAVING condition [, …] ]
[ ORDER BY {expression [ ASC | DESC ] }];
参数说明:
HAVING子句将组的一些属性与一个常数值比较,只有满足HAVING子句中的逻辑表达式的组才会被提取出来

✨ 9.2 案例示范

找出根据first_name字段值进行分组,并且first_name字段的计数少于 2 数据
test=# SELECT first_name FROM customer_t GROUP BY first_name HAVING count(first_name) < 2;
 first_name 
------------
 James 
 Local 
 Joes  
(3 rows)

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

汽车网络技术概述

车辆总线是一个专门的内部通信网络&#xff0c;将车辆&#xff08;如汽车、公共汽车、火车、工业或农业车辆、船舶或飞机&#xff09;内的部件相互连接。在电子学中&#xff0c;总线只是一个将多个电气或电子设备连接在一起的设备。车辆控制的特殊要求&#xff0c;如保证信息传…

数据分析-深度学习 Pytorch Day7

图像识别&#xff1a;CIFAR10图形识别1.CIFAR10数据集共有60000张彩色图像&#xff0c;这些图像式32*32*3&#xff0c;分为10个类&#xff0c;每个类6000张2.这里面有50000张用于训练&#xff0c;构成5个训练批&#xff0c;每一批10000张图&#xff1b;另外10000张用于测试&…

vhdx中的win10进行大版本系统升级

文章目录前言普通的win10大版本iso升级方式vhdx中的win10大版本升级方式难点分析 - 无法在虚拟驱动器上安装windows解决方案 - HyperV升级vhdx win10过程效果图hyperV虚机创建mbr引导启动项hyperV虚机设置在hyperV中升级过程图问题集锦问题一&#xff1a;hyverV虚机中升级报错&…

力扣刷题记录——561. 数组拆分、566. 重塑矩阵、575. 分糖果

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《力扣刷题记录——561. 数组拆分、566. 重塑矩阵、575. 分…

IDEA远程调试

1 概述 原理&#xff1a;本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信&#xff0c;传递调试指令和调试信息。 被调试程序的远程虚拟机&#xff1a;作为 Debug 服务端&#xff0c;监听 Debug 调试指令。jdwp是Java Debug Wire Protocol的缩写。 调试程序的本…

初识redis

1.初识Redis Redis是一种键值型的NoSql数据库&#xff0c;这里有两个关键字&#xff1a; 键值型 NoSql 其中键值型&#xff0c;是指Redis中存储的数据都是以key、value对的形式存储&#xff0c;而value的形式多种多样&#xff0c;可以是字符串、数值、甚至json&#xff1a;…

HTTPS一定可靠吗?

HTTPS一定可靠吗&#xff1f;中间人伪装服务器首先我们先看看客户端是如何验证证书的&#xff1f;数字证书签发和验证流程客户端校验服务端数字证书的过程如何出现中间人伪装服务器成服务器的情况&#xff1f;避免该情况中间人伪装服务器 客户端向服务端发起HTTPS建立连接请求时…

你知道吗?python lxml 库也能用于操作 svg 图片

在大多数场景中&#xff0c;我们都用 lxml 库解析网页源码&#xff0c;但你是否知道&#xff0c;lxml 库也是可以操作 svg 图片的。我们可以使用 lxml 中的 etree 模块来解析 SVG 文件&#xff0c;然后使用 SVG 中的各种元素和属性来进行操作。 python lxml 库操作 svg 图片lxm…

传输层协议:TCP协议(上)——协议结构、主要特点以及应用场景

简介 传输控制协议&#xff08;英语&#xff1a;Transmission Control Protocol&#xff0c;缩写&#xff1a;TCP&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;由IETF的RFC 793定义。在简化的计算机网络OSI模型中&#xff0c;它完成第四层传…

xubuntu系统偶发自动登出

项目场景&#xff1a; 系统&#xff1a;xubuntu-16.04.3-desktop 问题描述 使用xubuntu系统期间&#xff0c;在root用户下进行相关开发&#xff0c;突然系统会回到普通用户登录界面&#xff0c;需要输入密码进入到普通用户下   它会终止所有打开的应用程序和进程&#xff0…

【Vue组件通信方式】

文章目录前言一、父子组件通信1、父传子①使用props接收父组件传递的属性② 使用$attrs接收父组件未在 props 和 emits 中定义的属性和事件③使用 $parent获取父组件的信息2、子传父① 使用 $emit传递信息给父组件② 使用$refs获取子组件的属性和事件二、自定义事件&#xff1a…

独家丨DeepMind科学家、AlphaTensor一作解读背后的故事与实现细节

一直以来&#xff0c;DeepMind的Alpha系列工作&#xff0c;AlphaGo、AlphaStar等致力于棋类和游戏应用中战胜人类&#xff0c;而两个月前发布的AlphaTensor则把目标指向了科学计算领域&#xff0c;意在为矩阵乘法等基本计算任务自动设计更高效的经典算法&#xff0c;这一工作一…

Burpsuite超详细安装教程(附安装包)

写在开头 Burp Suite 是用于攻击web 应用程序的集成平台&#xff0c;包含了许多工具。Burp Suite为这些工具设计了许多接口&#xff0c;以加快攻击应用程序的过程。所有工具都共享一个请求&#xff0c;并能处理对应的HTTP 消息、持久性、认证、代理、日志、警报。 接下来我来…

软件测试面试经 | 双非院校,从外包到外企涨薪85%,他的涨薪秘籍全公开

本文为霍格沃兹测试开发学社优秀学员跳槽笔记&#xff0c;测试开发进阶学习文末加群。 本身是一所不入流的院校毕业的一名建工类专业的瓜娃子&#xff0c;至今记得当初是因为找工作被培训公司忽悠才加入到这个行业的&#xff0c;抱着做着试试的想法这一干在深圳就是6年&#xf…

excel替换技巧:如何将手机号码的部分数字变成星号

每个销售员经常会接触大量客户&#xff0c;会用小本本记下众多客户的信息&#xff0c;而手机号码就是其中重要的一项。为了保护客户隐私&#xff0c;在公开的信息里销售员需要把客户手机号码的部分数字变成星号。比如说&#xff0c;把客户A的手机号码15867852976修改成158****2…

SpringMvc源码分析(三) 请求执行过程之获取MethodHandler

1.请求是如何关联到DispatcherServlet的 DispatcherServlet是Servlet的实现&#xff0c;遵循Servlet生命周期的规则。 Servlet的生命周期即其出生到死亡的过程中分别会调用Servlet里的以下方法&#xff1a; 加载和实例化&#xff1a;可以参考SpringMvc源码分析一 init方法…

【JavaEE】博客前端

目录 一、列表页 1.1导航条 1.2主题区域 1.2.1个人信息框 1.2.2 内容区 二、登录页 三、详情页 一、列表页 整体布局如下&#xff1a; 1.1导航条 导航条分为三块&#xff0c;整体都设置id为导航栏&#xff0c;然后左右分为导航栏左和导航栏右。左边靠左&#xff0c;右边靠…

计算机视觉Computer Vision课程学习笔记四之Region and Edge Descriptions

第四章讲了区域和边界的描述 包括最佳区域评估方法&#xff0c;多物体识别&#xff0c;标签算法&#xff0c;斑点标记 以及矩评估的方法和优劣 Region Description Simple measurements on binary images • Use for recognition, etc. • Generate region descriptions whic…

Win10+CMake+VS2017编译OpenCV4.5.5

第一步&#xff1a;准备工作1 下载opencv4.5.5下载OpenCV4.5.5&#xff0c;并解压到自己新建文件夹opencv下。2 下载opencv_contrib4.5.5下载opencv_contrib4.5.5&#xff0c;解压到上面的opencv文件夹中&#xff0c;并在opencv文件夹中新建一个build文件夹&#xff0c;用来存放…

第一天总结 之 用户管理界面的实现 之 添加操作 的实现

添加操作的实现 明确页面的跳转 找到 admin_adduser.jsp中 form表单 前端的添加页面展示 在表单中输入 信息 点击注册跳转到 from表单对应的 action地址 UserAddServlet 创建UserAddServlet 从前端的form表单中获取值 然后在service层 进行 业务操作 即将这些属性存放在 Ob…