sql >> Base de Datos >  >> RDS >> Mysql

Uso de disparadores de MySQL

Este artículo describe cómo crear y usar disparadores de MySQL en su cuenta de A2 Hosting. Los disparadores son reglas predefinidas asociadas con una tabla. Se pueden llamar ("activar") antes o después de que una instrucción SQL inserte, actualice o elimine datos de la tabla asociada.

Puede utilizar disparadores en una amplia gama de escenarios. Por ejemplo, podría usar un disparador para cambiar automáticamente ciertos valores cuando se actualiza una fila. O puede especificar un conjunto de acciones para realizar cada vez que se elimine una fila. Las posibilidades son casi infinitas.

Creación y uso de activadores

Puede crear y usar disparadores en cualquier servidor de A2 Hosting que use MySQL.

Configurando una base de datos de prueba

Para demostrar un ejemplo básico de un activador en acción, comencemos creando una base de datos con fines de prueba. En la siguiente instrucción SQL, reemplace nombre de usuario con el nombre de usuario de su cuenta:

CREATE DATABASE username_test;
Puede ejecutar el comando SQL anterior (y los siguientes comandos SQL) desde la línea de comandos usando la herramienta MySQL, o en su navegador web usando phpMyAdmin.

Si está utilizando phpMyAdmin, haga clic en el nombre nombre de usuario _test para seleccionar la base de datos. De lo contrario, si está utilizando el programa de línea de comandos mysql, escriba la siguiente instrucción SQL:

USE username_test;

A continuación, cree una tabla en el nombre de usuario _prueba base de datos llamada productos . Para hacer esto, ejecute la siguiente instrucción SQL:

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));

La siguiente instrucción SQL agrega algunos datos de muestra a los productos tabla:

INSERT INTO products (prod_name, prod_cost, prod_price) VALUES ('Basic Widget',5.95,8.35),('Micro Widget',0.95,1.35),('Mega Widget',99.95,140.00);

¡Ahora estamos listos para crear un activador para nuestra tabla!

Creando el disparador

Vamos a crear un disparador llamado updateProductPrice . Este disparador en particular se activa cada vez que los productos se actualiza la tabla. Cuando ocurre este evento, el disparador verifica cada fila para ver si el costo del producto (prod_cost ) se está cambiando el valor. Si es así, el activador establece automáticamente el nuevo precio del artículo (prod_price ) a 1,40 veces el nuevo costo del artículo (en otras palabras, un margen de beneficio del 40 %).

Para crear este activador, ejecute las siguientes declaraciones de MySQL:

DELIMITER $$
CREATE TRIGGER `updateProductPrice`
BEFORE UPDATE ON `products`
FOR EACH ROW
BEGIN
  IF NEW.prod_cost <> OLD.prod_cost
    THEN
      SET NEW.prod_price = NEW.prod_cost * 1.40;
  END IF ;
END$$
DELIMITER ;
El DELIMITADOR El comando al comienzo de estas declaraciones evita que MySQL procese la definición del activador demasiado pronto. El DELIMITADOR El comando al final de estas declaraciones devuelve el procesamiento a la normalidad.
Usando el gatillo

El actualizarPrecioProducto el disparador ahora está listo para ser invocado automáticamente cada vez que una fila en los productos se actualiza la tabla. Por ejemplo, ejecute la siguiente instrucción SQL para cambiar el costo del widget básico:

UPDATE products SET prod_cost = 7.00 WHERE prod_id = 1;

Cuando ejecuta esta instrucción SQL, el disparador también se activa y actualiza automáticamente el precio del widget básico en proporción al nuevo costo. Para verificar esto, puede ejecutar la siguiente instrucción SQL:

SELECT * FROM products;

Esta declaración devuelve los siguientes resultados:

+---------+--------------+-----------+------------+
| prod_id | prod_name    | prod_cost | prod_price |
+---------+--------------+-----------+------------+
|       1 | Basic Widget |         7 |        9.8 |
|       2 | Micro Widget |      0.95 |       1.35 |
|       3 | Mega Widget  |     99.95 |        140 |
+---------+--------------+-----------+------------+
3 rows in set (0.00 sec)

Como puede ver, el updateProductPrice trigger ha actualizado automáticamente el precio del widget básico (9,80) en función del nuevo costo (7,00). Aunque este es un ejemplo simple de lo que puede hacer un activador, puede usar las mismas técnicas en sus propias bases de datos:las posibilidades son casi infinitas.

Más Información

  • Para obtener más información sobre los activadores de MySQL, visite http://dev.mysql.com/doc/refman/5.0/en/triggers.html.
  • Para obtener más información sobre CREATE TRIGGER declaración, visite http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html.