DÍA 63 Declaración avanzada de mysql: procedimiento almacenado

 ¿Qué es un procedimiento almacenado?

Un procedimiento almacenado es un conjunto de sentencias SQL para completar una función específica.

En el proceso de uso del procedimiento almacenado, el trabajo común o complejo se escribe de antemano utilizando sentencias SQL y se almacena con un nombre específico.Este proceso se compila, optimiza y almacena en el servidor de la base de datos. Cuando necesite usar el procedimiento almacenado, solo necesita llamarlo. Los procedimientos almacenados son más rápidos y eficientes que el SQL tradicional en ejecución

Ventajas de los procedimientos almacenados:

1. Después de una ejecución, el código binario generado residirá en el búfer para mejorar la eficiencia de la ejecución.

2, declaración SQL más la colección de declaraciones de control, alta flexibilidad.

3. Almacenar en el lado del servidor y reducir la carga de la red cuando llama el cliente.

4. Se puede llamar repetidamente y se puede modificar en cualquier momento sin afectar la llamada del cliente.

5. Puede completar todas las operaciones de la base de datos y también puede controlar los derechos de acceso a la información de la base de datos.

Crear, llamar y ver procedimientos almacenados

 ##创建存储过程:
 DELIMITER $$                  #将语句的结束符号从分号;临时改为两个$$ (可以是自定义)
 CREATE PROCEDURE Proc ()      #创建存储过程,过程名为Proc,不带参数
 -> BEGIN                      #过程体以关键字BEGIN开始
 -> select * from store_info;  #过程体语句
 -> END $$                     #过程体以关键字END结束
 ​
 DELIMITER;                    #将语句的结束符号恢复为分号
 ​
 ##调用存储过程##
 CALL Proc;
 ​
 ##查看存储过程##
 SHOW CREATE PROCEDURE [数据库.]存储过程名;  #查看某个存储过程的具体信息
 ​
 SHOW CREATE PROCEDURE Proc;
 SHOW CREATE PROCEDURE Proc\G
 ​
 SHOW PROCEDURE STATUS [LIKE '%Proc%'] \G
 ​
 ##删除存储过程##
 #存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。
 DROP PROCEDURE IF EXISTS Proc;
 #仅当存在时删除,不添加If EXISTS 时,如果指定的过程不存在,则产生一个错误。
 

Crear y llamar a procedimientos almacenados

delimiter $$
 create procedure proc01 ()    #创建存储过程,过程名为proc01,不带参数
 -> begin                      #过程体以关键字BEGIN开始
 -> create table student(id int,name char(10),age int);
 -> insert into student values(1,'zhangsan',18);
 -> insert into student values(2,'lisi',18);
 -> select * from student;
 -> end $$                     #过程体以关键字END结束
 ​
 delimiter ;                   #将语句的结束符号恢复为分号
 ​
 call proc01;                  #调用存储过程


Ver procedimientos almacenados

 show create procedure proc01;
 show create procedure proc01\G       #查看存储过程的具体信息
 ​
 show procedure status like '%Proc01%'\G

eliminar procedimiento almacenado

El método para modificar el contenido del procedimiento almacenado es eliminar el procedimiento almacenado original y luego crear un nuevo procedimiento almacenado con el mismo nombre.

 drop procedure if exists proc01;
 #仅当存在时删除,不添加If EXISTS 时,如果指定的过程不存在,则产生一个错误。

 parámetros del procedimiento almacenado

  • Parámetro de entrada IN:  indica que la persona que llama pasa un valor al procedimiento. (Los valores entrantes pueden ser literales o variables)
  • Parámetro de salida OUT:  Indica que el procedimiento transmite un valor al llamante. (Se pueden devolver múltiples valores) (Los valores salientes solo pueden ser variables)
  • Parámetros de entrada y salida INOUT:  no solo significa que la persona que llama pasa un valor al procedimiento, sino que también significa que el procedimiento envía un valor a la persona que llama. (El valor solo puede ser una variable) Nota: El nombre de la variable no puede contener guiones bajos.

Nota: Los nombres de las variables no pueden contener guiones bajos.

 delimiter $$
 create procedure proc2(in stuname char(20))    #参数为stuname,数据类型一定要与下面的where语句后字段的数据类型相同
 -> begin
 -> select * from student where name = stuname;
 -> end $$
 delimiter ;
  
 call proc2('zhangsan');      #调用存储过程,并传入参数'zhangsan'

 

 Declaraciones de control para procedimientos almacenados

preparar una mesa primero

 create table t (id int(10)) ;
 insert into t values (10) ;

Sentencia condicional if-then-else . . . . end if 

 delimiter $$  
 create procedure proc03(in innum int)   #创建存储过程proc03,参数为innum,类型为int 
 -> begin 
 -> declare var int;         #定义变量var为int类型 
 -> set var=innum*2;         #变量var的值等于传入的参数值乘2
 -> if var>=10 then          #当var的值大于10时,id值会加1,否则减1
 -> update t set id=id+1;  
 -> else 
 -> update t set id=id-1;  
 -> end if;  
 -> end $$
  
 delimiter ;
 ​
 call proc03(8);    #调用存储过程,并传入参数8
 ​
 call proc03(3);    #调用存储过程,并传入参数3

Instrucción de bucle while ···· end while

 delimiter $$                   #修改默认结束符为$$
 create procedure proc04()      #创建存储过程proc04
 -> begin                       #过程体以关键字begin开始
 -> declare var int(10);        #定义变量var为int类型
 -> set var=0;                  #var的起始值为0
 -> while var<6 do              #使用while循环,当var值小于6时满足条件,则向表中插入var的值
 -> insert into t values(var);  
 -> set var=var+1;              #每次循环后var值自增1
 -> end while;                  #结束while循环
 -> end $$                      #创建存储过程结束
 ​
 delimiter ;                    #重新修改默认结束符为原始的;
 ​
 call proc04;                   #调用存储过程proc04

El comando declare también se puede usar en el shell, por ejemplo:

decalre -i var Declare la variable var como un entero (es decir, agregue un atributo entero).

decalre +i var Eliminar el atributo entero de la variable var

Supongo que te gusta

Origin blog.csdn.net/weixin_57560240/article/details/130795139
Recomendado
Clasificación