Revisión del conocimiento de la base de datos: disparadores de Mysql

        Ha pasado un año desde el curso "Principios de la base de datos" del Sr. Xiaohong. Todos deben recordar las adiciones, eliminaciones y cambios, pero los factores desencadenantes probablemente estén casi olvidados (al menos se los devolví al Sr. Xiaohong). Repasemos con un ejemplo Eche un vistazo al conocimiento de disparadores disparadores.

En primer lugar, la definición de disparador

        Un activador es un objeto de base de datos relacionado con una tabla que se activa cuando se cumple una condición definida y ejecuta el conjunto de declaraciones definidas en el activador. Su pseudocódigo de definición es el siguiente:

DELIMITER ||
CREATE TRIGGER trigger_name trigger_time trigger_event 
ON table_name FOR EACH ROW 
BEGIN
    trigger_statement;
    ...;
    ...;
END
||
DELIMITER ;

Interpretación:
        DELIMITADOR ||: Cambie el símbolo final a || para evitar conflictos con el salto de línea en trigger_statement;
        trigger_name: nombre del activador trigger_time
        : trigger timing: ANTES, es decir, antes del evento o DESPUÉS, es decir, después del evento
        trigger_event : evento desencadenante: INSERTAR, ELIMINAR o ACTUALIZAR
        table_name: Indica el nombre de la tabla donde se crea el desencadenante, es decir, en qué tabla se crea el desencadenante
        PARA CADA FILA: Indica que cualquier operación en un registro que satisfaga el evento desencadenante activa el activador
        trigger_statement: el cuerpo del programa del activador, puede ser una instrucción SQL o varias instrucciones
        ||: indica que se completó la creación del activador
        DELIMITER ;: una vez completada la creación del activador, restaure el símbolo final a;

2. Activar instancia de creación

-- 创建数据库
create database book_test;
use book_test;
-- 创建图书信息表
create table bookinfo(
book_id int primary key auto_increment,
book_name varchar(20) not null,
price float(6,2) not null,
public_date date not null,
store int not null
);
-- 插入图书数据
insert into bookinfo(book_name,price,public_date,store) values('Android移动应用开发',39.8,'2021-12-26',6);
insert into bookinfo(book_name,price,public_date,store) values('Java程序设计',56.2,'2011-12-26',15);
insert into bookinfo(book_name,price,public_date,store) values('算法与数据结构',20,'2015-02-10',18);
select * from bookinfo
-- 创建日志数据表
CREATE TABLE `logs` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `log` varchar(255) DEFAULT NULL COMMENT '日志说明',
  PRIMARY KEY (`Id`)
)
-- 创建触发器,作用:当在bookinfo中插入一条数记录时,会在logs中生成一条日志信息
DELIMITER ||
CREATE TRIGGER user_log AFTER INSERT 
ON bookinfo FOR EACH ROW 
BEGIN
		DECLARE s1 VARCHAR(40) character set utf8;
		DECLARE s2 VARCHAR(40) character set gbk;
    SET s1 = ' is created';    
		#函数CONCAT将字符串连接  NEW.columnname:新增行的某列数据
		SET s2 = CONCAT(NEW.book_name,s1); 
		INSERT INTO logs(log) values(s2);
END
||
DELIMITER ;
-- 查看创建的触发器
SELECT * FROM information_schema.triggers;
-- 测试触发器
select * from logs;
insert into bookinfo(book_name,price,public_date,store) values('解忧杂货店',48,'2016-03-03',48);
select * from logs;

3. Resultados de la operación

1>El disparador se crea con éxito:

2> El disparador se ejecuta con éxito:

Supongo que te gusta

Origin blog.csdn.net/qq_43554335/article/details/123258104
Recomendado
Clasificación