Introducción a Mariadb y MySQL desencadenantes

Introducción a Mariadb y MySQL desencadenantes

Objetivo

Comprender y aprender a usar los desencadenantes de mariadb y mysql.

Requisitos

  • No se necesitan requisitos particulares

Convenciones

  • # - requiere que el comando Linux dado se ejecute con privilegios raíz
    directamente como usuario raíz o mediante el uso de sudo dominio
  • ps - Dado el comando Linux para ser ejecutado como un usuario regular no privilegiado

Introducción

Mysql/mariadb desencadenantes Se almacenan programas asociados con una tabla en una base de datos, y se utilizan para realizar automáticamente algunas acciones cuando un INSERTAR, BORRAR o ACTUALIZAR El evento se realiza sobre la mesa. Se puede configurar un disparador para realizar una acción antes o después del evento está asociado a. En este tutorial, veremos cómo crear y administrar un disparador.

Una base de datos de prueba

En aras de este tutorial, crearemos una base de datos con solo una mesa muy simple, con una lista de libros y sus respectivos géneros. Procedamos:

Mariadb [(ninguno)]> Crear base de datos book_test; Mariadb [(ninguno)]> Crear tabla book_test.libro ( -> id smallInt (1) sin firmar no nulo auto_incement, -> nombre varchar (25) no nulo, -> género varchar (25) no nulo, -> clave primaria (id)); 
Copiar

Creamos nuestra mesa trivial, ahora deberíamos poblar con algunos libros. Aquí están algunos de mis favoritos:

Mariadb [(ninguno)]> use book_test; Mariadb [book_test]> insertar en el libro (nombre, género) valores -> ('1984', 'distopio'), -> ('El señor de los anillos', 'fantasía'), -> ('sobre la genealogía de Moralidad ',' filosofía '); 
Copiar

Eso es suficiente para nuestro ejemplo. Aquí está la representación visual de nuestra tabla:

+----+---------------------------+------------+ | ID | nombre | género | +----+---------------------------+------------+| 1 | 1984 | Distópico | | 2 | El señor de los anillos | Fantasía | | 3 | Sobre la genealogía de la moral | Filosofía | +----+---------------------------+------------+ 
Copiar

Ahora que preparamos nuestra tabla de pruebas, podemos ver cómo crear y asociar un desencadenar lo.

Crear un disparador

Como se dijo antes, al crear un desencadenante, podemos dejar que nuestra base de datos realice automáticamente una cierta acción cada vez que el evento especificado, que puede ser uno entre INSERTAR, ACTUALIZAR o BORRAR, se realiza sobre la mesa. Digamos, por ejemplo, que por alguna extraña razón, no queremos permitir más de un libro de filosofía en nuestra colección, ¿cómo podemos hacer cumplir esta regla?? Si bien la restricción se puede implementar en un nivel superior, podemos configurarlo directamente en la base de datos, utilizando un disparador. La sintaxis para crear una es muy fácil:

Crear activador gatillo_name # asigne un nombre al activador antes | Después de # establecer cuando el disparador debe ser ejecutado insertar | Eliminar | Actualizar # Establezca la instrucción asociada con el activador en table_name # Establezca la tabla asociada con el activador para cada fila Trigger_stmt # Declarar el cuerpo de activación 
Copiar

Siguiendo la sintaxis anterior, podemos crear nuestro disparador:

Mariadb [book_test]> delimitador $ mariadb [book_test]> Crear gatillo NO_More_Philosophy antes de insertar en book_test.Libro -> para cada fila Begin -> Si es nuevo.género = "Filosofía" y (Seleccionar recuento (*) de Book_test.Libro donde género = "Filosofía")> 0 Entonces -> Signal sqlState '45000' set Message_text = 'Solo se permite un libro de filosofía!'; -> final si; -> end $ mariadb [book_test]> delimitador; 
Copiar

Lo primero que hemos hecho en la línea 1 es instruir a la base de datos para usar el ps El carácter como delimitador de la declaración en lugar del valor predeterminado ;. Esto se debe a que el delimitador de punto y coma se usará dentro del cuerpo del gatillo.

Luego creamos el gatillo usando el Crear disparador declaración en la línea 2, seguida de la nombre Queremos asignarle: "NO_More_Philosophy" en este caso. Después de eso, especificamos que el disparador debe ser ejecutado ANTES el INSERTAR declaración. Inmediatamente después, asociamos el gatillo con la tabla de "libro".

El cuerpo del gatillo comienza con POR CADA FILA En la línea 3: usamos COMENZAR Para marcar el comienzo de nuestras declaraciones compuestas, las que deben ejecutarse cuando se llama el disparador, y marcamos el final con FIN, Al igual que lo hacemos con otros procedimientos.

Una vez que el disparador se asocia con la tabla, se ejecutará antes de que se realice cada fila de inserción.

Cuando se realiza un gatillo, dos pseudorecords están poblados: VIEJO y NUEVO: Los valores asignados a ellos varían según el tipo de evento. Por un INSERTAR declaración, ya que la fila es nueva, el VIEJO pseudorecord no contendrá valores, mientras que NUEVO contendrá los valores de la nueva fila que se deben insertar. Lo contrario sucederá para un BORRAR Declaración: Antiguo contendrá los valores antiguos, y nuevo estará vacío. Finalmente para ACTUALIZAR declaraciones, ambas estarán pobladas, ya que los viejos contendrán los valores antiguos de la fila, mientras que los nuevos contendrán los nuevos.

Nuestro disparador en la línea 4 verificará el valor del género columna para la nueva fila (identificada por NUEVO): Si está establecido en "Filosofía", consultará los libros con el género de 'filosofía', y verifique si al menos uno ya existe. Si es el caso, planteará una excepción con el mensaje 'Solo se permite un libro de filosofía!'.

Como última cosa en la línea 8, volvimos a poner el delimitador a ;.

Nuestro disparador en acción

Vamos a ver nuestro disparador en acción: intentaremos insertar un nuevo libro con el género "Filosofía" y ver qué sucede:

Mariadb [book_test]> insertar en el libro (nombre, género) valores ('república', 'filosofía'); Error 1644 (45000): solo se permite un libro de filosofía! 
Copiar

Como puede ver, el disparador funcionó y el servidor respondió con el mensaje de error que establecimos cuando intentamos agregar otro libro de filosofía a nuestra colección.



Gestionar los desencadenantes

Para verificar los desencadenantes en una base de datos, todo lo que tenemos que hacer es ejecutar el Show desencadenantes dominio:

Mariadb [book_test]> show disparadores \ g; ************************** 1. fila *****************************.género = "Filosofía" y (Seleccionar recuento (*) de Book_test.Libro donde género = "Filosofía")> 0 luego señala SQLState '45000' set Message_text = 'Solo se permite un libro de filosofía!'; TERMINARA SI; Tiempo final: antes creado: NULL SQL_MODE: NO_AUTO_CREATE_USER, NO_Engine_Substitution Definter: root@localhost caracteres_set_client: Latin1 colation_connection: LATIN1_SWEDISH_CI DATABASE COLACIÓN: LATIN1_SWEDISH_CI 
Copiar

Dejar caer un desencadenante es igual de fácil: todo lo que tenemos que hacer es hacer referencia al disparador por su nombre. Por ejemplo, si nos gustaría eliminar el disparador "NO_More_Philosophy", debemos ejecutar:

Mariadb [book_test]> Drop disparador no_more_philosophy;

Si sabemos que consulta la base de datos para los desencadenantes existentes, recibimos un conjunto vacío:

Mariadb [book_test]> show desencadenantes; Conjunto vacío (0.01 seg) 

Conclusiones

En este tutorial aprendimos qué es un desencadenante y la sintaxis que debe usarse para crear una. También creamos una tabla trivial y asociamos el desencadenante con ella, viendo cómo se puede utilizar para garantizar una regla específica. Finalmente vimos cómo podemos verificar los desencadenantes existentes en una base de datos y cómo podemos eliminar uno. Aunque esto debería ser suficiente para comenzar, puede consultar la documentación oficial de mariadb/mysql para obtener un conocimiento más profundo.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Instale MySQL en Ubuntu 20.04 LTS Linux
  • Mastering Bash Script Loops
  • Cómo instalar MySQL en Almalinux
  • Ubuntu 20.04 WordPress con instalación de Apache
  • Instalación de WordPress OpenLitespeed
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Instalación de ampache Raspberry Pi
  • Ubuntu 20.04: WordPress con instalación de Nginx