Ajuste del rendimiento de mysql (3)

Prefacio

  Los artículos más recientes son para presentarle la optimización del rendimiento de mysql. En los dos primeros artículos, presentamos los conocimientos relacionados con el índice , que incluyen principalmente: el concepto básico de índice, las ventajas y desventajas del índice de referencia, la estructura subyacente del índice, la clasificación y aplicación del índice. Principios y sintaxis del diseño de índices. El siguiente artículo presenta vistas y disparadores , y presenta los conceptos, creación, modificación y visualización y eliminación de vistas y disparadores, respectivamente.
  Este artículo le presentará el contenido relacionado de los procedimientos almacenados y las funciones almacenadas. Incluye principalmente los conceptos básicos de procedimientos almacenados, creación, llamada y borrado de procedimientos almacenados, además, también introduce la declaración, asignación y aplicación de variables en mysql. Finalmente, presentaré tres estructuras de bucle en el procedimiento almacenado en mysql. Y para presentarle el contenido relevante del cursor.
  Primero, le presentaré el contenido relevante del procedimiento almacenado.

Uno, el procedimiento almacenado

1. Descripción general de los procedimientos almacenados y las funciones almacenadas

  Los procedimientos y funciones almacenados son una colección de declaraciones SQL que se han compilado y almacenado en la base de datos de antemano. Llamar a procedimientos y funciones almacenados puede simplificar mucho el trabajo para los desarrolladores de aplicaciones, reducir la transmisión de datos entre la base de datos y el servidor de aplicaciones y mejorar el procesamiento de datos. La eficiencia proviene de los beneficios.
  De hecho, la diferencia más crítica entre los procedimientos almacenados y las funciones almacenadas es : la función debe devolver un valor, pero no el procedimiento almacenado.

  • Función : es un proceso con un valor de retorno;
  • Proceso : es una función sin valor de retorno;

2. Cree un procedimiento almacenado

  A continuación, presentaré la sintaxis de creación de procedimientos almacenados.

create procedure procedure_name([proc_parameter[,...]])
begin
	--SQL语句
end;

  Usamos un caso para ilustrar específicamente la creación de un procedimiento almacenado. Es conveniente que todos comprendan mejor la sintaxis del procedimiento almacenado.

delimiter $
create procedure pro_test1()
begin
	select 'hello mysql';
end $
delimiter ;

  A lo que debemos prestar atención aquí es: usamos una palabra clave en el caso - "delimitador", que se usa para declarar el delimitador de la declaración SQL . Esta palabra clave realmente le dice al intérprete de mysql si el comando ha finalizado y si mysql es ejecutable. Generalmente de forma predeterminada : el delimitador es ;. En el cliente de línea de comando, si una línea de comando termina con un punto y coma, luego de presionar Enter, mysql ejecutará el comando.

3. Llame al procedimiento almacenado

  Después de crear el procedimiento almacenado, podemos llamar al procedimiento almacenado en mysql. La sintaxis de llamada es la siguiente:

call procedure_name()

4. Ver el procedimiento almacenado

  Después de llamar al procedimiento almacenado, podemos ver el procedimiento almacenado en MySQL. La siguiente es la declaración de vista de almacenamiento de la siguiente manera:

--首先我们查询db_name数据库中的所有的存储过程;
select name from mysql.proc where db = 'db_name';
--查询存储过程的状态信息
show procedure status;
--查询某个存储过程的定义
show create procedure test.pro_test1 \G;

5. Eliminar el procedimiento almacenado

  Al igual que otras declaraciones de mysql, los procedimientos almacenados se pueden crear, ver y, por supuesto, eliminar. A continuación, presentamos la eliminación de procedimientos almacenados en mysql. La sintaxis de eliminación es la siguiente:

drop procedure [if exists] sp_name;

6. Gramática

  A través de la introducción anterior, creo que todos tienen cierta comprensión de los procedimientos almacenados, de hecho, aquellos que han aprendido a programar pueden saber que los procedimientos almacenados también se pueden programar, lo que significa que también podemos usar nuestro común al crear procedimientos almacenados. Las variables, expresiones y estructuras de control del pueden completar funciones más complejas.

(1), variables

  • declare
      nosotros primero para introducir una variable de procedimiento almacenado, declare variables con la palabra clave declare . Podemos definir una variable local mediante declare, pero el alcance de la variable solo puede estar en el bloque begin ... end. La sintaxis principal es la siguiente:
declare var_name[,...] type [default value]

  Introdujimos la sintaxis de declare e ilustramos el uso de declare a través de un caso.

delimiter $
create procedure pro_test2()
begin
	declare num int default 5;
	select num+ 10;
end$
delimiter ;
  • El conjunto
      que presentamos anteriormente que declare define una variable local. A continuación, presentamos el conjunto de asignación directa, que puede asignar constantes o expresiones de asignación. La sintaxis específica es la siguiente:
set var_name = expr [, var_name = expr]...

  Introdujimos la sintaxis de set e ilustramos el uso de set a través de un caso.

delimiter $
create procedure pro_test3()
begin
	declare name varchar(20);
	set name = 'mysql';
	select name;
end$
delimiter ;

  Por supuesto, podemos usar el método select ... into para realizar operaciones de asignación. A continuación, podemos usar un caso para ilustrar el uso:

delimiter $
create procedure pro_test5()
begin
	declare countnum int;
	select count(*) into countnum from city;
	select countnum;
end$
delimiter ;

(2), si condiciona el juicio

  El capítulo anterior introdujo principalmente las variables en el procedimiento almacenado, incluyendo principalmente la definición de una variable declare y el conjunto de palabras clave de asignación. A continuación, presentaré la declaración de juicio de la condición if. La estructura gramatical es la siguiente:

if search_condition then statement_list
	[elseif search_condition then statement_list]
	[else statement_list]
end if

  A continuación, usamos un caso para mostrar la realización del enunciado de juicio condicional if. Para facilitar su comprensión, el caso específico es el siguiente:

  Según la variable de altura definida, determine el tipo de cuerpo de la altura actual.

  • 180 y más ——————> alto
  • 170-180 ——————> figura estándar
  • 170 o más ——————> cifra promedio

  El proceso de almacenamiento específico es el siguiente:

create procedure pro_test4()
begin
	declare height int default 175;
	declare description varchar(50) default '';
	if height >= 180 then set description = '身材高挑';
	elseif height >= 170 and height < 180 then set description = '标准身材';
	else set description = '一般身材';
end if;
select concat('身高', height, '对应的身材类型为:',description);
end $;

  Podemos implementar procedimientos almacenados llamando a declaraciones, la implementación específica es la siguiente:

call pro_test6();

  Los resultados específicos son los siguientes:

(3), parámetros de transferencia

  Como mencionamos anteriormente, también se pueden programar procedimientos almacenados, así como funciones. Hemos aprendido lenguajes de programación, ya sea java o c, y las funciones pueden pasar parámetros. El formato de sintaxis específico es el siguiente:

create procedure procedure_name([in/out/inout]参数名 参数类型)

  De acuerdo con la gramática de los parámetros de paso que acabamos de introducir, hay in, out y inout. Por lo tanto, introduciremos el significado de los tres a continuación:

  • in : Este parámetro se puede usar como entrada, es decir, el llamador debe pasar un valor, aquí, si no lo especificamos, es el valor predeterminado.
  • out : el parámetro se utiliza como salida, es decir, el parámetro se puede utilizar como valor de retorno
  • inout : se puede utilizar como parámetro de entrada o como parámetro de salida

  Es el tema de la altura que mencionamos antes para realizar el uso de in, out e inout respectivamente. Debido al tipo de cuerpo que mencionamos anteriormente, no lo volveremos a describir.
  Primero, usemos in para lograr el problema de altura, la declaración de implementación específica es la siguiente:

create procedure pro_test5(in height int)
begin
	declare description varchar(50) default '';
	if height >= 180 then set description = '身材高挑';
	elseif height >= 170 and height < 180 then set description = '标准身材';
	else set description = '一般身材';
end if;
select concat('身高', height, '对应的身材类型为:',description);
end $;

  A continuación, saquemos la salida para darnos cuenta del problema de altura.

create procedure pro_test5(in height int, out description varchar(100))
begin
	declare description varchar(50) default '';
	if height >= 180 then set description = '身材高挑';
	elseif height >= 170 and height < 180 then set description = '标准身材';
	else set description = '一般身材';
end if;
end $;

  A continuación, llamamos a esta función

call pro_test5(168, @description)$
select @description$

  A lo que debemos prestar atención aquí es que aparece una palabra clave @description en la llamada. A continuación, les presentaré conocimientos relevantes:

  •    @description: Este tipo de variable debe tener como prefijo el símbolo "@" delante del nombre de la variable. Este símbolo se llama variable de sesión de usuario, lo que significa que es efectivo durante toda la sesión. Es similar a una variable global.
  •   @@ global.sort_buffer_size: Este tipo de símbolo "@@" antes de la variable se llama variable de sistema.

(4), estructura del caso

  El juicio de la condición if se introdujo antes, y luego presentamos el juicio de estructura de caso. La estructura gramatical específica es la siguiente:

--**方法一**:
case case_value
	when when_value then statement_list
	[when when_value then statement_list]...
	[else statement_list]
end case;
--方法二:
case
	when search_condition then statement_list
	[when search_condition then statement_list]...
	[else statement_list]
end case

  Lo anterior es la sintaxis básica de case. A continuación, ilustraremos el uso de case a través de un case; el caso específico es el siguiente:

  Dado un mes, luego calcula el trimestre

create procedure pro_test7(mon int)
begin
	declare result varchar(10);
	case
		when mon >=1 and mon <= 3 then
			set result = '第一季度';
		when mon >=4 and mon <= 6 then
			set result = '第二季度';
		when mon >=7 and mon <= 9 then
			set result = '第三季度';
		else 
			set result = '第四季度';
	end case;
	select concat('传递的月份为:', mon, ',计算出的结果为:', result) as content;
end$

(5), mientras que bucle

  El formato condicional se introdujo anteriormente; incluida nuestra declaración if común y la declaración de caso. A continuación, le presentaré las declaraciones de bucle, que incluyen principalmente las funciones while, repeat y loop. Primero, te presentaré el ciclo while. La sintaxis específica es la siguiente:

while search_condition do
	statement_list
end while;

  A continuación, usamos un caso para ilustrar el uso de case; el caso específico es el siguiente:

  Calcule el valor agregado de la acumulación de 1 an

  La implementación específica es la siguiente:

create procedure pro_test8(n int)
begin
	declare total int default 0;
	declare num int default 1;
	while num <= n do 
		set total = total + num;
		set num = num + 1;
	end while;
	select total;
end$

(6), estructura de repetición

  Acabamos de presentarle el ciclo while y luego presentaremos la estructura de repetición. La estructura de repetición es una declaración de control de bucle condicional que sale del bucle cuando se cumple la condición. A continuación, presentaré la diferencia entre las dos estructuras de bucle de repetición y while:

  • while se ejecuta solo cuando se cumplen las condiciones
  • Repetir es salir del circuito cuando se cumplen las condiciones

  La sintaxis específica es la siguiente:

repeat 
	statement_lsit
	until search_condition
end repeat;

  A continuación, usamos un caso para ilustrar el uso de la repetición; este caso es el mismo que el caso anterior, por lo que la implementación es la siguiente:

create procedure pro_test9(n int)
begin
	declare total int default 0;
	repeat
		set total = total + n;
		set n = n - 1;
		until n = 0
	end repeat;
	select total;
end$

(7), declaración de bucle

  Introducimos el último tipo de función de bucle de declaración de bucle. El bucle puede implementar bucles simples. Las condiciones para salir del bucle se definen mediante otras declaraciones, generalmente utilizando la declaración de licencia. La sintaxis específica es la siguiente:

[begin_label:] LOOP
	statement_list
end loop[end_label]

  A lo que debemos prestar atención aquí es: si no agrega una declaración para salir del bucle en la lista_de_ declaraciones, entonces la declaración de bucle se puede utilizar para implementar un bucle sin fin simple.

(8), dejar declaración

  Acabamos de presentar la declaración de bucle, y también mencionamos que la estructura de bucle debe usarse junto con la declaración de licencia, donde la declaración de licencia se usa para salir del bucle en el bucle . Generalmente, debe usarse junto con begin ... end o loop. A continuación, usamos un ejemplo simple de loop and leave, la implementación específica es la siguiente:

create procedure pro_test10(n int)
begin
	declare total int default 0;
	c:loop
		set total = total + n;
		set n = n - 1;
		if n <= 0 then
			leave c;
		end if;
	end loop c;
	select total;
end$

(9), cursor / cursor

  Introdujimos tres estructuras de bucle antes, y vamos a introducir un tipo de datos particularmente importante: cursor. El cursor es un tipo de datos que se utiliza para almacenar el conjunto de resultados de una consulta. En los procedimientos y funciones almacenados, el cursor se puede utilizar para repetir los resultados. El uso del cursor incluye la declaración del cursor, abrir, buscar y cerrar, la sintaxis es la siguiente:

--声明光标:
declare cursor_name cursor for select_statement;
--open光标
open cursor_name;
--fetch光标
fetch cursor_name into var_name [, var_name]...
--close光标
close cursor_name;

  Luego de introducir la sintaxis básica de cursores, a continuación, implementaremos la aplicación de cursores a través de un caso. Primero inicializamos el script, es decir, primero creamos una tabla e insertamos algunos datos.

create table emp(
	id int(11) not null auto_increment,
	name varchar(50) not null comment '姓名',
	age int(11) comment '年龄',
	salary int(11) comment '薪水',
	primary key(`id`)
)engine=innodb default charset=utf8;
insert into emp(id, name, age, salary) values (null, 'stefan', 16, 28000),(null, 'napoleon', 26, 18000),(null, 'porrty', 18, 8000),(null, '张三', 26, 2600);

  Se crea la tabla y se insertan los datos, y luego podemos ver los datos en la tabla emp y obtenerlos fila por fila para mostrarlos.

create procedure pro_test11()
begin
	declare e_id int(11);
	declare e_name varchar(50);
	declare e_age int(11);
	declare e_salary int(11),
	declare emp_result cursor for select * from emp;
	declare exit handler for not found set has_data=0;
	open emp_result;
	repeat 
		fetch emp_result into e_id, e_name, e_age, e_salary;
		select concat('id=', e_id, ',name=',e_name, ', age=', e_age, ',薪资为:', e_salary);
		until has_data = 0
	end repeat;
	close emp_result;
end$

  Todos nuestros procedimientos almacenados han sido introducidos. Los procedimientos almacenados son más importantes y también una forma muy avanzada de escribir. Espero que pueda dominarlos bien. A continuación, le presentaré las funciones almacenadas.

Dos, función de almacenamiento

  Introducimos previamente el procedimiento almacenado, luego introducimos la estructura sintáctica de la función almacenada:

create function function_name([param type ...])
returns type
begin
	...
end;

  A continuación, definimos una función de almacenamiento para obtener el número total de registros que cumplen la condición (ciudad). La siguiente implementación es la siguiente:

delimiter $
create function count_city(countryId int)
returns int
begin
	declare cnum int;
	select count(*) into cnum from city where country_id = countryId;
	return cnum;
end$
delimiter ;

  A continuación, llamamos a la función de almacenamiento, la implementación específica es la siguiente:

select count_city(1);
select count_city(2);

  Debido a que la función de almacenamiento es relativamente simple, somos relativamente simples en la introducción.

para resumir

  Nuestros artículos recientes le presentarán el rendimiento de mysql. En los dos primeros artículos, presentamos el conocimiento relacionado de índices y vistas y disparadores, respectivamente . Este artículo le presentó el contenido relacionado de los procedimientos almacenados y las funciones almacenadas. La introducción de procedimientos almacenados incluye principalmente: conceptos básicos, creación, llamada y eliminación de procedimientos almacenados. Además, también introduce la declaración, asignación y aplicación de variables en mysql. Además, también introduce tres estructuras de bucle en procedimientos almacenados en mysql. A continuación, le presentaré el contenido relevante del cursor. Finalmente, presentamos la sintaxis de las funciones almacenadas. Por lo tanto, mysql es una habilidad muy importante. Casi todos los trabajos en la computadora necesitan una habilidad de mysq. Por lo tanto, necesitamos un dominio especial. La vida es interminable y la lucha es interminable Trabajamos duro todos los días, estudiamos mucho, mejoramos constantemente nuestras habilidades y creemos que aprenderemos algo. ¡Venga! ! !

Supongo que te gusta

Origin blog.csdn.net/Oliverfly1/article/details/109412113
Recomendado
Clasificación