Vistas, procedimientos almacenados, funciones, disparadores.

MySQL Avanzado

vista

Las vistas se almacenan en la base de datos y se pueden reutilizar. Los datos no se almacenan en las vistas.

Definir vista

CREATE VIEW 视图名 AS SELECT 列 1,列 2... FROM 表(查询语句);
Usar vistas
SELECT * FROM 视图名

Eliminar vista
drop view 视图名

CREATE VIEW sel_news AS
SELECT
  n.id,
  n.title,
  t.type_name
FROM
  news n
  LEFT JOIN TYPE t
    ON n.typeid = t.typeid;

-- 使用视图
 SELECT
  *
FROM
  sel_news;

-- 删除视图 
 DROP VIEW sel_news

procedimiento almacenado

Conocimiento de la base de datos: puede almacenar datos en unidades de cola, utilizar lenguaje SQL y operar datos.

El lenguaje Java también se puede utilizar en la base de datos para tener funciones de procesamiento lógico.

Ha sido escrito de antemano y almacenado en la base de datos. Puede llamarlo directamente cuando lo use.
Ventajas: el proceso de procesamiento de una determinada lógica se almacena directamente en la base de datos. Se ejecuta más rápido.

Desventajas: alta dependencia de la base de datos, mala portabilidad

Definición del procedimiento almacenado MySQL

> 
>创建存储过程的语法格式
> 
> create procedure 存储过程名([in 变量名 类型,out 参数 2,…]>			 begin
> 
>	 [declare 变量名 类型 [DEFAULT];]
> 
>  存储过程语句块; 
> 
> 
> end;

Análisis gramatical:
1. Los parámetros de los procedimientos almacenados se dividen en tres tipos: in, out e inout.

2.in representa el parámetro de entrada (en parámetro de forma predeterminada), lo que indica que el valor del parámetro debe ser especificado por el programa que llama.

3.out representa el parámetro de salida, lo que significa que después de que el procedimiento almacenado calcula el valor del parámetro, el resultado del cálculo del parámetro de salida se devuelve al programa que llama.

4. Inout representa tanto un parámetro de entrada como un parámetro de salida, lo que significa que el valor del parámetro puede ser especificado por el programa que llama y el resultado del cálculo del parámetro inout se puede devolver al programa que llama.

5. Las declaraciones del procedimiento almacenado deben incluirse entre el inicio y el final.

6.Declare se usa para declarar variables. Para asignar un valor predeterminado a una variable, use default. Para cambiar el valor de la variable en un bloque de declaración, use set variable=value;

p.ej:

-- ------------------------------------存储过程--------------------------------------------------------------

DELIMITER $$
-- 创建存储过程
CREATE
    PROCEDURE demo1()
   
   -- 存储过程体
	BEGIN
	-- declare 用来声明变量
	DECLARE v_name VARCHAR(10) DEFAULT '';
	SET v_name = 'jim';
	SELECT v_name; -- 测试输出语句
	END$$
DELIMITER ;

-- 调用存储过程
CALL demo1();



-- 查询新闻类型为1的有几条 演示入参和出参
 DELIMITER $$

CREATE PROCEDURE type_count (IN p_typeid INT, OUT p_count INT) -- 存储过程体
 BEGIN
  SELECT
    COUNT (*) INTO p_count
  FROM
    news
  WHERE typeid = p_typeid;
  SELECT
    p_count;
END $$
DELIMITER;
-- 在一个存储过程中调用另一个存储过程
 CALL type_count (1, @p_count) 
 
 



-- 存储过程中逻辑判断 if  else
DELIMITER $$

CREATE PROCEDURE demo2 (IN p_day INT, OUT p_name VARCHAR (10))
BEGIN
  IF p_day = 0
  THEN SET p_name = "星期天";
  SELECT
    p_name;
  ELSEIF p_day = 1
  THEN
  SET p_name="星期一";
     SELECT p_name; 
  ELSE SET p_name= "无效日期";
  SELECT p_name;
  END IF;
END $$
DELIMITER;

CALL demo2 (0,@p_name);

-- 使用存储过程插入信息
DELIMITER $$
CREATE PROCEDURE save_admin (
  IN p_account VARCHAR (10),
  IN p_password VARCHAR (50),
  OUT p_result VARCHAR (10)
)BEGIN
  DECLARE v_count INT DEFAULT 0;
  SELECT COUNT(*) INTO v_count FROM admin WHERE account = p_account;
  IF v_count=0 THEN
  INSERT INTO admin (account,PASSWORD)VALUES(p_account,p_password);
  SET p_result = '保存成功';
  ELSE
  SET p_result = '账号已存在';
  SELECT p_result;
  END IF;
END $$
-- 测试CALL 
CALL save_admin ('001','123',@p_result)




DELIMITER $$
CREATE PROCEDURE saveUser (
  IN p_account VARCHAR (20),
  IN p_sex CHAR (1),
  OUT res_mark INT)
BEGIN
  DECLARE v_count INT DEFAULT 0;
  
  SELECT COUNT(*) INTO v_count
  FROM
    admin
  WHERE account = p_account;
  IF v_count =0
  THEN
  INSERT INTO admin (account,sex)
  VALUES
    (p_account,p_sex);
  SET res_mark = 0;
  ELSE SET res_mark = 1;
  END IF;  
END $$

-- 测试CALL 
CALL save_admin ('001','123',@res_mark)


función

Las funciones son similares a los procedimientos almacenados, pero las funciones se utilizan principalmente para consultas.


create function 函数名([参数列表]) returns 数据类型
begin  DECLARE 变量;

sql 语句;
return;
end;

Aviso:

1. La lista de parámetros contiene dos partes: nombre del parámetro y tipo de parámetro
2. Cuerpo de la función: debe haber una declaración de devolución; de lo contrario, se informará un error
3. Solo hay una oración en el cuerpo de la función, por lo que puede omitirla start end
4. Utilice la instrucción delimitadora para establecer la marca de finalización. La función de configuración no puede tener parámetros SET GLOBAL log_bin_trust_function_creators=TRUE;

función de eliminación

Nombre de la función DROP FUNCTION,
por ejemplo:

-- ------------------------------------------函数--------------------------------------------------------

-- 函数  不带参数的
DELIMITER $$

CREATE FUNCTION test() RETURNS INT 
BEGIN DECLARE v_num INT DEFAULT 0;
SELECT
  COUNT(*) INTO v_num
FROM
  admin;
RETURN v_num;
END $$
DELIMITER
-- 测试
SELECT test ();




-- 带参数的
DELIMITER $$

CREATE
    FUNCTION findType(p_type INT) RETURNS VARCHAR(10)
    BEGIN
DECLARE v_type VARCHAR(10) DEFAULT '';
IF p_type = 0 THEN
SET v_type = '超级管理员';
ELSE 
SET v_type = '管理员';
END IF;
RETURN v_type;
    END$$
    

SELECT account,id,findType(TYPE) FROM admin



DELIMITER $$

CREATE
    FUNCTION find_news_type(p_typeid INT) RETURNS VARCHAR(10)
    BEGIN
DECLARE v_type VARCHAR(10) DEFAULT '';
SELECT type_name INTO v_type FROM TYPE WHERE typeid = p_typeid;
RETURN v_type;
    END$$ 

SELECT id,title,find_news_type(typeid) FROM news

desencadenar

Similar a los procedimientos almacenados, funciones, relacionadas con tablas, un poco como eventos

Se activa automáticamente antes o después de agregar, modificar o eliminar una tabla

Los desencadenantes tienen las siguientes características:

1. Asociado a la mesa

Los desencadenadores se definen en una tabla específica, que se denomina tabla de desencadenadores.

2. Activar activadores automáticamente

Al realizar una operación INSERTAR, ACTUALIZAR o ELIMINAR en datos de una tabla, si el

Se define un disparador para una acción específica, que se ejecuta automáticamente y no se puede deshacer.

3. No se puede llamar directamente

A diferencia de los procedimientos almacenados, los desencadenadores no se pueden llamar directamente ni pueden pasar ni aceptar parámetros.

4. Como parte de una transacción

El disparador y la declaración que activa el disparador se tratan como una sola transacción, que se puede obtener del disparador.

Retroceder en cualquier lugar.
Reglas de sintaxis para definir desencadenadores:

 CREATE TRIGGER 触发器名称 触发时机 触发事件 
 
ON 表名称 

FOR EACH ROW -- 行级触发

 BEGIN
 
语句 

END;

Análisis de sintaxis:

1. Nombre del disparador: Se utiliza para identificar el disparador y lo personaliza el usuario.

2. Tiempo de disparo: su valor es antes o después.

3. Evento desencadenante: sus valores son insertar, actualizar y eliminar

4. Nombre de la tabla: identifica el nombre de la tabla para crear el disparador, es decir, en qué tabla se crea el disparador.

5. Declaración: es el cuerpo del programa desencadenante. El programa desencadenante puede utilizar el inicio y el final como principio y fin, y contiene varias declaraciones en el medio, por
ejemplo:

-- 触发器
-- 在admin表中插入一条数据后自动更新admin_log表
DELIMITER $$

CREATE
    
    TRIGGER save_adminLog AFTER 
    INSERT
    ON admin
    FOR EACH ROW BEGIN
	INSERT INTO admin_log(id,account,oper_time) VALUES(new.id,new.account,NOW());
    END$$

DELIMITER ;

INSERT INTO admin(account,PASSWORD)VALUES('s001','1231');



-- 当admin表和role表的主键分别都是admin_role表的外键约束时,
-- 想要删除admin表或role表中的数据,必须先删除admin_role表中的关联关系
DELIMITER $$

CREATE
    TRIGGER delete_admin_role
     BEFORE
     DELETE
    ON admin
    FOR EACH ROW BEGIN
	DELETE FROM admin_role WHERE adminid= old.id;
    END$$

DELIMITER ;
DELETE FROM admin WHERE id=3

Supongo que te gusta

Origin blog.csdn.net/crraxx/article/details/122591250
Recomendado
Clasificación