当前位置: 首页 > news >正文

数据库之存储过程和函数

目录

一、存储过程和函数概述

二、创建并调用存储过程和函数

1.创建存储过程

2.创建存储函数

3.调用存储过程和函数

三、关于存储过程和函数的表达式

1.变量

1.变量的分类

2.在存储过程和函数中应用变量

2.定义条件和处理程序

1.定义条件

2.定义处理程序

3.游标的使用

1.定义游标

2.打开游标

3.使用游标

4.关闭游标

4.流程控制的使用

四、查看存储过程和函数

1.查看存储过程和函数的状态

2.查看存储过程和函数的定义

3.查看存储过程和函数的信息

五、修改和删除存储过程和函数

1.修改存储过程和函数

2.删除存储过程和函数


一、存储过程和函数概述

存储过程和函数具有以下优点:

1.允许标准组件式编程:存储过程和函数在创建后可以在程序中被多次调用,有效提高了SQL语句的重要性、共享性和可移植性。

2.较快的执行速度:如果某一操作包含大量的事务处理代码,并且被多次执行,那么存储过程要比批处理的执行执行速度快很多。因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器会对其进行分析优化,并将最终执行计划存储在系统中,而批处理的事务处理语句在每次运行时都要进行编译和优化。

3.减少网络流量:对于大量的SQL语句,将其组织成存储过程,会比一条一条的调用SQL语句要大大节省网络流量,降低网络负载。

4.安全:数据库管理员通过设置执行某一存储过程的权限,从而限制相应数据的访问权限,避免非授权用户对数据的访问,保证数据的安全。


存储过程和函数也存在一定的缺陷:

1.存储过程和函数的编写比单个SQL语句的编写要复杂很多,需要用户具有更高的技能和更丰富的经验。

2.在编写存储过程和函数时,需要创建这些数据库对象的权限。


二、创建并调用存储过程和函数

存储程序可以分为存储过程和函数。存储过程和函数的操作主要包括创建存储过程和函数、调用存储过程和函数、查看存储过程和函数,以及修改和删除存储过程和函数。


1.创建存储过程

创建存储过程使用SQL语句CREATE PROCEDURE来实现,其语法形式如下:

CREATE PROCEDURE proc_name([proc_parameter[,...]])

[characteristic...] routine_body


(1)CREATE PROCEDURE为创建存储过程的关键字。

(2)proc_name表示要创建的存储过程名。

(3)proc_parameter表示存储过程的参数,参数形式如下:

[IN|OUT|INOUT] parameter_name TYPE

其中IN表示输入参数,可把外界的数据存储到存储过程当中;OUT表示输出参数,可把存储过程的运算结果传递到外界;INOUT表示输入输出参数,既可以把外界的数据传递到存储过程当中,又可以把存储过程的运算结果传递到外界;parameter_name表示参数名;TYPE表示参数的数据类型。

注:存储过程中的参数名不要与数据表中的字段名重复,否则系统会报错。

(4)characteristic表示存储过程的特性,可取值及其意义如下:

LANGUAGE SQL:表示存储过程的routine_body部分使用SQL语言编写,当前系统支持的语言为SQL。

[NOT]DETERMINISTIC:DETERMINISTIC表示存储过程的执行结果是确定的,就是每次输入相同的参数并执行存储过程后,得到的结果是相同的;默认为NOT DETERMINISTIC,表示执行结果不确定,即相同的输入可能得到不同的结果。

{CONTAINS SQL|NO SQL|READS SQL DATA|MODIFIES SQL DATA}:指明子程序使用SQL语句的限制。CONTAINS SQL为默认值,表示子程序包含SQL语句,但不包含读或写数据的语句;NO SQL表示子程序不包含SQL语句;READS SQL DATA表示子程序包含读取数据的语句,但不包含写数据的语句;MODIFIES SQL DATA表示子程序包含写入数据的语句。

SQL SECURITY {DEFINER|INVOKER}:指定可执行存储过程的用户,DEFINER表示只有创建者才能执行,INVOKER表示拥有权限的调用者可以执行。

COMMENT ‘string’:表示存储过程或者函数的注释信息。

(5)routine_body表示需要执行的SQL语句的集合,可以使用BEGIN表示开始,使用END表示结束。


2.创建存储函数

创建存储函数使用SQL语句CREATE FUNCTION来实现,其语法形式如下:

CREATE FUNCTION func_name([parameter_name[,...]])

RETURNS TYPE

[characteristic...] routine_body


CREATE FUNCTION为创建存储函数的关键字;func_name表示存储函数名;parameter_name表示存储函数参数名;TYPE表示函数返回值的数据类型;characteristic指定存储函数的特性,取值与创建存储函数参数名;routine_body表示函数体。


3.调用存储过程和函数

存储过程必须使用关键字CALL调用,而存储函数与MySQL内置函数的调用相同,使用关键字SELECT。

1.调用存储过程

通常使用关键字CALL调用存储过程,其语法形式如下:

CAL procedure_name({parameter[,...]});

其中的parameter表示变量名,存储过程的返回值将赋予该变量。

2.调用存储函数

通常使用关键字SELECT调用存储函数,其语法形式如下:

SELECT function_name([parameter[,...]]);


三、关于存储过程和函数的表达式

1.变量

变量是表达式中最基本的元素,可用于存储临时数据。

1.变量的分类

用户变量:带有前缀@,只能被定义它的用户使用,作用于当前整个连接,当前连接断开后,所定义的用户变量会被全部释放。用户变量不用提前定义就可以直接使用。

局部变量:没有前缀,一般用于SQL语句块中,比如存储过程的BEGIN...END中。其作用域仅限于该语句块,在语句块执行完毕后,局部变量就会被释放。局部变量使用前需要先通过DECLARE声明。如果没有声明,则初始值为NULL。

系统变量:带有前缀@@,MySQL有许多已经设置默认值的系统变量。系统变量包含全局变量和会话变量。全局变量会影响整个服务器,而会话变量只影响个人客户端连接。


2.在存储过程和函数中应用变量

局部变量可以在子程序中定义并应用,其作用范围是BEGIN...END语句块。


(1)定义变量

在存储过程中使用DECLARE语句定义局部变量,其语法形式如下:

DECLARE var_name[,...] type [DEFAULT value];

上述语句中,var_name为局部变量名称,type为变量的数据类型,DEFUALT value是为变量指定的默认值。如果没有DEFAULT value,初始值为NULL。

例如,定义一个INT类型的变量,名称为var1:

DECLARE var1 INT;

注:变量的定义必须在复合语句开头,并且在任何其他语句前面。也就是说,DECLARE语句在存储过程和函数中使用时,必须出现在BEGIN...END语句块的最前面,并且变量名不区分大小写。可以一次声明多个相同类型的变量。


(2)为变量赋值

定义变量之后,可以使用SET关键字为变量赋值,语法形式如下:

SET var_name = expr [,var_name = expr]...;

变量值可以为常量或者表达式。

另外,也可以使用SELECT...INTO...查询语句将查询结果赋给变量,这要求查询结果必须只有一行,具体语法形式如下:

SELECT col_name[,......] INTO var_name[,......] FROM table_name;

Col_name为字段名,var_name为变量名。


2.定义条件和处理程序

条件和处理程序是MySQL提供的一种异常处理机制,定义条件是事先定义程序执行过程中可能会遇到的问题;定义处理程序是定义在遇到问题时执行的相应的处理方法,并且保证存储过程和函数在遇到问题时不终止。


1.定义条件

在MySQL中定义条件使用DECLARE...CONDITION语句,其语法形式如下:

DECLARE condition_name CONDITION FOR [condition_type];

上述语句中,condition_name表示条件名。Condition_type表示条件的类型,其可取值及其意义如下:

Mysql_error_code:表示数值类型错处代码。

Sqlstate_value:表示长度为5的字符串类型错误代码。

注:数值类型的错误代码不要使用0,因为0表示成功而不是错误;字符串类型的错误代码不要使用‘00’,因为‘00’表示成功而不是错误。


2.定义处理程序

在定义条件之后,可以使用DECLARE...HANDLER语句定义处理程序,语法形式如下:

DECLARE handler_type HANDLER FOR condition_value[...] statement

下面简单介绍上述语句中各组成部分及其意义。


(1)handler_type为异常处理方式,可取值及其意义如下:

CONTINUE:表示遇到错误不处理,程序继续执行。

EXIT:表示遇到错误立即退出程序。

UNDO:表示遇到错误后撤回之前的操作(目前MySQL暂不支持)。


(2)condition_value表示错误值,可取值及其意义如下:

Mysql_error_code:表示数值类型错处代码。

Sqlstate_value:表示包含5个字符串类型错误值。

Condition_name:表示使用DECLARE...CONDITION语句定义的条件名。

SQLWARNING:匹配所有01开头的SQLSTATE错误代码。

NOT FOUND:匹配所有02开头的SQLSTATE错误代码。

SQLEXCEPTION:匹配所有未被SQLWARNING和NOT FOUND捕获的SQLSTATE错误代码。


(3)statement为程序语句段,表示在遇到定义的异常条件时,需要执行的存储过程或函数。

定义处理程序有以下6中方法:

方法一:捕获sqlstate_value

方法二:捕获mysql_error_code

方法三:先定义条件,然后再调用条件

方法四:使用SQLWRENING

方法五:使用NOT FOUND

方法六:使用SQLEXCEPTION


3.游标的使用

在存储过程和函数中,当查询语句返回多条记录时,可以使用游标对结果集进行逐条读取。


1.定义游标

在MySQL中,使用DECLARE关键字来定义游标,其语法形式如下:

DECLARE cursor_name CURSOR FOR select_statement;

上述语句中,cursor_name表示游标名,select_statement表示SELECT语句,返回一个用于创建游标的结果集。


2.打开游标

打开游标的关键字为OPEN,其语法形式如下:

OPEN cursor_name;

注:在打开一个游标时,游标并不指向第一条记录,而是指向第一条记录的前边。


3.使用游标

使用游标的关键字是FETCH,其语法形式如下:

FETCH cursor_name INTO var_name [,var_name] ...

上述语句的作用是将定义游标cursor_name时查询出的数据赋予变量var_name。


4.关闭游标

关闭游标的关键字为CLOSE,其语法形式如下:

CLOSE cursor_name;


4.流程控制的使用

流程控制语句是指可以控制程序运行顺序的指令,程序运行顺序主要包括顺序执行、条件执行和循环执行。MySQL支持的流程控制语句包括IF语句、CASE语句、LOOP语句、REPEAT语句、WHILE语句、LEAVE语句、ITERATE语句和RETURN语句。

1.IF语句

IF实现条件判断,语句中可以包含多个判断条件,系统会根据条件的结果是否为TRUE执行相应的操作,语法形式如下:

IF search_condition THEN statement_list

[ELSEIT search_condition THEN statement_list]...

[ELSE statement_list]

END IF

上述语句中,search_condition为判断条件,statement_list为相应操作,如果所有判断条件均不为TRUE,则执行ELSE子句中的操作。


2.CASE语句

CASE语句可以实现比IF语句更复杂的条件操作,该语句有两种使用形式。

第1种语法形式如下:

CASE case_expr

WHEN when_value THEN statement_list

[WHEN when_value THEN statement_list]...

[ELSE statement_list]

END CASE

上述语句中,case_expr表示判断条件的表达式,将此表达式与每个WHEN子句中的when_value值进行比较,直到与其中一个相等,此时,执行相应THEN子句中的statement_list。如果表达式与所有when_value值都不相等,则执行ELSE子句中的statement_list。

第2种语法形式如下:

CASE case_expr

WHEN search_condition THEN statement_list

[WHEN search_condition THEN statement_list]...

[ELSE statement_list]

END CASE

上述语句中,系统会对每个WHEN子句中的search_condition表达式进行判断,直到某个search_condition表达式为TRUE,此时将执行其对应的THEN子句中的statement_list。如果所有search_condition表达式的值都不为TRUE,则执行ELSE子句中的statement_list。


3.LOOP语句和LEAVE语句

LOOP语句可以实现简单的循环,使得系统能够重复执行循环结构内的语句列表。该语句列表由一条或多条语句组成,每条语句使用(;)隔开。语法形式如下:

[loop_label:]LOOP

Statement_list

END LOOP[end_list]

上述语句中,loop_list表示LOOP语句的标注名称(可以省略),statement_list表示需要循环执行的SQL语句。

如果不在statement_list中增加退出循环的语句,LOOP语句可以实现简单的死循环。使用LEAVE语句可以退出循环。语法形式如下:

LEAVE label;

其中,label参数表示循环的标注名。


4.REPEAT语句

REPEAT语句可以实现一个带条件判断的循环结构。语法形式如下:

[repeat_label:]REPEAT

Statement_list

UNTIL search_condition

END REPEAT [repeat_label]

repeat_label表示REPEAT语句的标注名称(可以省略),每次SQL语句statement_list执行完毕后,会对条件search_condition进行判断,如果结果为TRUE,循环结束,否则继续执行循环中的语句。


5.WHILE语句

WHILE语句同样可以实现一个带条件判断的循环结构,但与REPEAT语句不同的是,WHILE语句会先对条件进行判断,如果为TRUE,才会执行需要循环的操作,否则终止循环,语法形式如下:

[while_label:]WHILE search_condition DO

Statement_list

END WHILE[while_label]

上述语句中,while_label为WHILE语句的标注名称,search_condition为判断条件,statement_list为需要循环的操作。


6.ITERATE语句

ITERATE语句只可以出现在LOOP语句、REPEAT语句和WHILE语句中,意义为再次执行循环,语法形式如下:

ITERATE label;

上述语句中,label表示循环的标志。


四、查看存储过程和函数

1.查看存储过程和函数的状态

使用SHOW STATUS语句可以查看存储过程和函数的状态。基本语法形式如下:

SHOW {PROCEDURE|FUNCTION} STATUS [LIKE ‘pf_name’];

PROCEDURE或FUNCTION指定查看的是存储过程还是函数,LIKE语句指定存储过程和函数的名称。

主要参数及其意义如下:

Db:表示存储过程或函数所属数据库。

Name:表示存储过程或函数名。

Type:表示是存储过程还是函数。

Definer:表示创建存储过程或函数的用户。

Modified:表示最后修改日期。

Created:表示创建日期。

Security_type:表示MySQL在执行存储过程和函数的时候,是以创建函数的权限来执行,还是以调用者的权限来执行。


2.查看存储过程和函数的定义

使用SHOW CREATE语句可以查看存储过程和函数的定义语句,语法形式如下:

SHOW CREATE {PROCEDURE|FUNCTION} pf_name;

PROCEDURE或FUNCTION指定查看的是存储过程还是函数,pf_name指定存储过程或函数名。

主要参数及其意义如下:

Procedure:表示存储过程名。

Sql_name:表示SQL语句的模式。

Create Procedure:表示存储过程的定义语句。


3.查看存储过程和函数的信息

在MySQL中,存储过程和函数的信息存储在系统数据库information_schema中的routines表中,查看存储过程和函数详细信息的语法形式如下:

SELECT * FROM information_schema.routines

WHERE ROUTINE_NAME=’pf_name’;

上述语句中,ROUTINE_NAME指定存储过程或函数名,如果有存储过程和存储函数名相同,还可以使用ROUTINE_TYPE指定类型。

主要参数及其意义如下:

ROUTINE_CATALOG:表示存储过程或函数的目录。

ROUTINE_SCHEMA:表示存储过程或函数所属数据库。

ROUTINE_NAME:表示存储过程或函数名。

ROUTINE_TYPE:表示是存储过程还是存储函数。

ROUTINE_DEFINITION:表示BEGIN...END语句。

SECURITY_TYPE:表示MySQL在执行存储过程和函数的时候,是以创建用户的权限来执行,还是以调用者的权限来执行。


五、修改和删除存储过程和函数

1.修改存储过程和函数

在MySQL中,使用ALTER关键字可以修改存储过程和函数,基本语法形式如下:

ALTER {PROCEDURE|FUNCTION} pf_name [characteristic...];

上述语句中,pf_name表示存储过程或函数名。characteristic表示存储过程和函数的特性,其可取值有CONTAINS SQL,NO SQL,READS SQL DATA,MODIFIES SQL DATA,SQL SECURITY{DEFINER|INVOKER},各值得意义与创建存储过程和函数时相同。


注:修改存储过程使用ALTER PROCEDURE语句,修改存储函数使用ALTER FUNCTION语句,这两个语句结构相同,参数也一样。并且它们与创建存储过程和函数得语句中的参数也基本一样。

不能使用关键字ALTER更改存储过程的参数或子程序,如果需要修改,必须删除存储过程后再重新创建。


2.删除存储过程和函数

在MySQL中,删除存储过程和函数可以使用DROP语句,语法形式如下:

DROP {PROCEDURE|FUNCTION} [IF EXISTS] pf_name;

pf_name为要删除的存储过程或函数名。使用IF EXISTS可以在执行删除操作时,先判断存储过程和函数是否存在,避免系统报错。

相关文章:

数据库之存储过程和函数

目录 一、存储过程和函数概述 二、创建并调用存储过程和函数 1.创建存储过程 2.创建存储函数 3.调用存储过程和函数 三、关于存储过程和函数的表达式 1.变量 1.变量的分类 2.在存储过程和函数中应用变量 2.定义条件和处理程序 1.定义条件 2.定义处理程序 3.游标的…...

《SPSS零基础入门教程》学习笔记——02.数据管理

文章目录 2.1 连续变量的离散化2.2 自动重编码、编秩与数值计数2.3 几个常用过程2.4 多个数据文件的操作2.5 数据字典2.6 数据核查(1)数据验证模块(2)数据检验 2.7 数据准备 计算新变量(转换 -> 计算变量&#xff0…...

嵌入式软件的一些常用调试测试方法

嵌入式软件的仿真调试测试是确保软件质量和功能正确性的关键步骤。以下是几种常见的仿真调试测试方式: 1.集成开发环境(IDE)调试: 使用IDE(如IAR EWARM、Keil MDK、Eclipse等)内置的调试器进行断点设置、单…...

Android T about screen rotation(二)

需求:客户因为模具问题,屏幕方向需要动态的变动.(方向: 0 , 90 , 180 ,270) 拆分:设备开机过程中图像显示可分为三个阶段,boot logo(1)->kernel logo(2),这一段的处理需要驱动层,所以暂时忽略. 开机动画 Bootanimation(3)阶段 和 Home Launcher应用显示(4)阶段是需要修改的…...

qt反射之类反射、方法反射、字段反射

话不多说&#xff0c;直接上代码&#xff1a; main.cpp: #include < QCoreApplication > #include “fstudent.h” #include “manage.h” int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //注册类型 qRegisterMetaType(“FStudent”); Manage m…...

服务器数据恢复—raid5阵列离线硬盘强制上线失败如何恢复数据?

服务器数据恢复环境&#xff1a; 某品牌2850服务器上有一组由6块SCSI硬盘组建的raid5磁盘阵列&#xff0c;上层操作系统为Redhat linuxext3文件系统。 服务器故障&初检&#xff1a; 服务器在运行过程中突然瘫痪&#xff0c;管理员对服务器中的raid进行检查后发现有两块硬盘…...

FastAPI+Vue3零基础开发ERP系统项目实战课 20240815上课笔记 列表和字典相关方法的学习和练习

昨日回顾 1、大小写转换2、去除空格3、判断是否为数字4、前缀后缀 昨日练习题进度 练习&#xff1a;判断验证码是否正确 1、生成一个由四个字符组成的验证码字符串&#xff0c;要求有大写有小写&#xff0c;要求左右两边有空格2、打印到控制台3、让用户输入这个验证码&…...

基于微信小程序的诗词智能学习系统的设计与实现(全网独一无二,24年最新定做)

文章目录 前言&#xff1a; 博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为…...

httplib库:用C++11搭建轻量级HTTP服务器

目录 引言 一. httplib库概述 二. httplib核心组件 2.1 数据结构 2.2 类和函数 2.3 服务器搭建 ​编辑 结语 引言 在现代软件开发中&#xff0c;HTTP服务是网络应用的基础。对于需要快速搭建HTTP服务器或客户端的场景&#xff0c;使用成熟的第三方库可以极大提高开发效…...

基于嵌入式C++、SQLite、MQTT、Modbus和Web技术的工业物联网网关:从边缘计算到云端集成的全栈解决方案设计与实现

一、项目概述 1.1 项目目标与用途 随着工业4.0时代的到来&#xff0c;传统工业设备与现代信息技术的结合越来越紧密。物联网工业网关作为连接工业设备与云端平台的桥梁&#xff0c;在工业自动化、设备监控、远程运维等方面发挥着至关重要的作用。本项目旨在设计并实现一个能够…...

Chapter 38 设计模式

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、单例模式二、工厂模式 前言 在软件开发中&#xff0c;设计模式提供了一种可重用的解决方案&#xff0c;以应对在特定环境中反复出现的问题。这些模式是基于经验总结…...

Redis5主备安装-Redis

本次Redis有两台服务器及3个独立IP&#xff1a;主服务器的ip地址是192.168.31.190&#xff0c;从服务器的IP地址是192.168.31.191&#xff0c;vipIP地址是192.168.31.216 主备方案承载Redis最大的好处是无需考虑Redis崩后无法访问。 前提是需要优先安装keepalived&#xff0c;…...

C++票据查验、票据ocr、文字识别

现在&#xff0c;80、90后的人们逐渐过渡为职场上的主力人员&#xff0c;在工作中当然也会碰到各种各样的问题。比如&#xff0c;当你的老板给你一个艰难的任务时&#xff0c;肯定是不能直接拒绝的。那么我们该怎么做呢&#xff1f;翔云建议您先认真考虑老板说的任务的难度&…...

pytest.ini介绍

1.pytest.ini是什么 &#xff1f; pytest.ini文件是pytest的主配置文件&#xff1b;pytest.ini文件的位置一般放在项目的根目录下&#xff0c;不能随便放&#xff0c;也不能更改名字。在pytest.ini文件中都是存放的一些配置选项 &#xff0c;这些选项都可以通过pytest -h查看到…...

Vue项目打包成桌面应用

Vue项目打包成桌面应用 一、使用 NW.js 打包 NW.js基于Chromium和Node.js。它允许您直接从浏览器调用Node.js代码和模块&#xff0c;并在应用程序中使用Web技术。此外&#xff0c;您可以轻松地将web应用程序打包为本机应用程序。 NW官网...

DEFAULT_JOURNAL_IOPRIO

/* * 这些是 CFQ&#xff08;完全公平排队&#xff09;实现的 I/O 优先级组。 RT 是实时类&#xff0c;它总是能获得优质服务。 BE 是尽力而为的调度类&#xff0c;是任何进程的默认类别。 IDLE 是空闲调度类&#xff0c;只有在没有其他人使用磁盘时才会被服务。 */ /* *…...

【阿卡迈防护分析】Vueling航空Akamai破盾实战

文章目录 1. 写在前面2. 风控分析3. 破盾实战 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…...

使用AWS Lambda轻松开启Amazon Rekognition之旅

这是本系列文章的第一篇&#xff0c;旨在通过动手实践&#xff0c;帮助大家学习亚马逊云科技的生成式AI相关技能。通过这些文章&#xff0c;大家将掌握如何利用亚马逊云科技的各类服务来应用AI技术。 那么让我们开始今天的内容吧&#xff01; 介绍 什么是Amazon Rekognition&…...

如何获取VS Code扩展的版本更新信息

获取VS Code 扩展的版本更新的需求 因为企业内部有架设私有扩展管理器的要求&#xff0c;但是对于一些官方市场的插件&#xff0c;希望可以自动获取这些扩展的更新并上传至私有扩展管理器。于是就有了本篇介绍的需求&#xff1a; 通过API的方式获取VS Code 扩展的更新。 关于…...

Python开源项目周排行 2024年第13周

#2024年第13周2024年8月5日1roop一款基于深度学习框架TensorFlow和Keras开发的单图换脸工具包&#xff0c;提供了丰富的功能和简洁易用的界面&#xff0c;使得用户可以轻松实现单图换脸操作。支持多张人脸替换成同一个人脸&#xff0c;勾选多人脸模式即可 人脸替换 高清修复自…...

day04--js的综合案例

1.1 商品全选 需求&#xff1a;商品全选 1. 全选 &#xff1a;点击全选按钮,所有复选框都被选中 2. 全不选 &#xff1a;点击全不选按钮,所有复选框都被取消选中 3. 反选 &#xff1a; 点击反选按钮,所有复选框状态取反 <!DOCTYPE html> <html lang"en">…...

【产品经理】定价策略

年初的时候&#xff0c;尝试自己独立运营了一个美团店铺&#xff0c;最终没有继续做下去了&#xff0c;原因是利润率太低&#xff0c;平台和骑手把利润拿走太多了&#xff0c;根本没有钱赚&#xff0c;烧钱搞流量更是深不见底。 不过也学到了很多东西&#xff0c;比如选品策略…...

webrtc学习笔记3

Nodejs实战 对于我们WebRTC项目而言&#xff0c;nodejs主要是实现信令服务器的功能&#xff0c;客户端和服务器端的交互我们选择websocket作为通信协议&#xff0c;所以以websocket的使用为主。 web客户端 websocket WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行…...

Transformer架构;Encoder-Decoder;Padding Mask;Sequence Mask;

目录 Transformer架构 Transformer架构的主要组成部分: 简单举例说明输入和输出: Encoder-Decoder 编码器/解码器组成 6、位置前馈网络(Position-wise Feed-Forward Networks) 7、残差连接和层归一化 10、掩码Mask 10.1 Padding Mask 10.2 Sequence Mask 为什么…...

【leetcode详解】特殊数组II : 一题代表了一类问题(前缀和思想)

前缀和的优势 给定一个数组&#xff0c;前缀和的特点在于&#xff0c;任意给出一对始末位置&#xff0c;能够用O(1)的时间复杂度得到始末位置之间所有元素的某种关系。 题型分析 这道题目正是“给出始末位置&#xff0c;检测其中元素特点”那一类&#xff0c;那我们就想&#…...

SQL每日一练-0814

今日SQL题难度&#xff1a;&#x1f31f;☆☆☆☆☆☆☆☆☆ 1、题目要求 找出每个部门中薪资最高的员工显示部门ID、部门名称、员工ID、员工姓名以及对应的薪资 2、表和虚拟数据 现有两个表&#xff1a;Employees 和 Departments&#xff0c;记录了员工和部门信息。…...

Android持久化技术—文件存储

Android持久化技术—文件存储 文件存储是Android中最基本的一种数据存储方式&#xff0c;它不对存储的内容进行任何的格式化处理&#xff0c;所有数据都是原封不动地保存到文件当中的&#xff0c;因而它比较适合用于存储一些简单的文本数据或二进制数据。如果你想使用文件存储…...

动手学深度学习(pytorch)学习记录12-激活函数[学习记录]

激活函数 激活函数&#xff08;activation function&#xff09;通过计算加权和并加上偏置来确定神经元是否应该被激活&#xff0c; 它们将输入信号转换为输出的可微运算。 import torch import matplotlib.pyplot as plt 简单定义一个画图的函数 def graph_drawing(x_,y_…...

微服务实战系列之玩转Docker(十)

前言 我们知道Docker的“使命”是为了快速完成应用的迁移和部署。为提升它的战斗能力&#xff0c;Docker官方携手发布了Docker Swarm—— 一个快速完成Docker集群构建的利器。那么请先回忆一下本系列第八篇&#xff08;重点compose&#xff09;和第九篇&#xff08;重点networ…...

Mysql(四)---增删查改(进阶)

文章目录 前言1.查询操作1.1.全列查询1.2.指定列查询1.3.列名为表达式查询1.4.查询中使用别名1.5.去重查询1.6.排序1.6.2.NULL 1.7.条件查询1.8.分页查询 2.修改3.删除 前言 上一篇博客&#xff0c;我们学习了一些主键的概念&#xff0c;并且分别创造了一些示例表&#xff0c;…...