Disparadores MySQL

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 6

Disparadores MySQL

CREATE TRIGGER esta declaración crea un nuevo disparador en Mysql

CREATE TRIGGER trigger_name


{BEFORE | AFTER} {INSERT | UPDATE| DELETE }
ON table_name FOR EACH ROW
trigger_body;

En esta sintaxis:

 Primero, especifique el nombre del disparador que desea crear después


de las CREATE TRIGGER palabras clave. Tenga en cuenta que el nombre
del activador debe ser único dentro de una base de datos.
 A continuación, especifique el tiempo de acción del disparador que
puede ser BEFORE o AFTER que indica que el disparador se invoca antes
o después de que se modifique cada fila.
 A continuación, especifique la operación que activa el disparador, que
puede ser INSERT, UPDATE o DELETE.
 Después de eso, especifique el nombre de la tabla a la que pertenece el
desencadenador después de la ON palabra clave.
 Finalmente, especifique la instrucción que se ejecutará cuando se active
el activador. Si desea ejecutar varias declaraciones, use la BEGIN END
declaración compuesta.

El cuerpo del disparador puede acceder a los valores de la columna afectada


por la instrucción DML(*).

Para distinguir entre el valor de las columnas BEFORE y AFTER el DML que se


disparó, utilice los modificadores NEW y OLD.

Por ejemplo, si actualiza la descripción de la columna, en el cuerpo del


activador, puede acceder al valor de la descripción antes de la
actualización OLD.description y al nuevo valor NEW.description.
La siguiente tabla ilustra la disponibilidad de los modificadores OLD y NEW:

Evento de disparo OLD NEW

INSERT No si
UPDATE si si
DELETE si No

 BEFORE INSERT - activado antes de que los datos se inserten en la tabla.


 AFTER INSERT - activado después de que los datos se insertan en la
tabla.
 BEFORE UPDATE - activado antes de que se actualicen los datos de la
tabla.
 AFTER UPDATE - activado después de actualizar los datos en la tabla.
 BEFORE DELETE - activado antes de que los datos se eliminen de la tabla.
 AFTER DELETE - activado después de que los datos se eliminan de la
tabla.

Nomenclatura:
(BEFORE | AFTER)_tableName_(INSERT| UPDATE | DELETE)
Por ejemplo, before_order_update es un desencadenante invocado antes de
que order se actualice una fila de la tabla.

tablename_(BEFORE | AFTER)_(INSERT| UPDATE | DELETE)


Por ejemplo, order_before_update es lo mismo que el before_order_update
disparador anterior.

Ejemplo1:

mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));

Query OK, 0 rows affected (0.03 sec)

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account

FOR EACH ROW SET @sum = @sum + NEW.amount;

Query OK, 0 rows affected (0.01 sec)

Ejemplo2:
mysql> SET @sum = 0;

mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);

mysql> SELECT @sum AS 'Total amount inserted';

+-----------------------+

| Total amount inserted |

+-----------------------+

| 1852.48 |

+-----------------------+

Ejemplo3:

mysql> CREATE TRIGGER ins_transaction BEFORE INSERT ON account

FOR EACH ROW PRECEDES ins_sum

SET

@deposits = @deposits + IF(NEW.amount>0,NEW.amount,0),

@withdrawals = @withdrawals + IF(NEW.amount<0,-NEW.amount,0);

Query OK, 0 rows affected (0.01 sec)

Ejemplo4:

mysql> delimiter //

mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account

FOR EACH ROW

BEGIN

IF NEW.amount < 0 THEN

SET NEW.amount = 0;

ELSEIF NEW.amount > 100 THEN

SET NEW.amount = 100;

END IF;

END;//

mysql> delimiter ;

Ejemplo5:
CREATE TABLE test1(a1 INT);

CREATE TABLE test2(a2 INT);

CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);

CREATE TABLE test4(

a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

b4 INT DEFAULT 0

);

delimiter |

CREATE TRIGGER testref BEFORE INSERT ON test1

FOR EACH ROW

BEGIN

INSERT INTO test2 SET a2 = NEW.a1;

DELETE FROM test3 WHERE a3 = NEW.a1;

UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;

END;

delimiter ;

INSERT INTO test3 (a3) VALUES

(NULL), (NULL), (NULL), (NULL), (NULL),

(NULL), (NULL), (NULL), (NULL), (NULL);

INSERT INTO test4 (a4) VALUES

(0), (0), (0), (0), (0), (0), (0), (0), (0), (0);

Gestión del Conocimiento


Jueves: 07 Noviembre 2019
Implementar Disparadores para copias de tablas transaccionales
Notas :

(*) Sentencias SQL

1. Lenguaje de definición de datos - Data Definition Language (DDL)

Las sentencias DDL se utilizan para crear y modificar la estructura de las tablas así como otros
objetos de la base de datos.

 CREATE - para crear objetos en la base de datos.


 ALTER - modifica la estructura de la base de datos.
 DROP - borra objetos de la base de datos.
 TRUNCATE - elimina todos los registros de la tabla, incluyendo todos los espacios
asignados a los registros.

2. Lenguaje de manipulación de datos - Data Manipulation Language (DML)

Las sentencias de lenguaje de manipulación de datos (DML) son utilizadas para gestionar datos
dentro de los schemas.

 SELECT - para obtener datos de una base de datos.


 INSERT - para insertar datos a una tabla.
 UPDATE - para modificar datos existentes dentro de una tabla.
 DELETE - elimina todos los registros de la tabla; no borra los espacios asignados a los
registros.
 MERGE - UPSERT operation (insert or update)
 CALL - call a PL/SQL or Java subprogram
 EXPLAIN PLAN - interpretation of the data access path
 LOCK TABLE - concurrency Control

3. DCL - Data Control Language


 GRANT - allow users access privileges to the database
 REVOKE - withdraw users access privileges given by using the GRANT command

4. TCL - Transaction Control Language which deals with a transaction within a


database.
 COMMIT - commits a Transaction
 ROLLBACK - rollback a transaction in case of any error occurs
 SAVEPOINT - to rollback the transaction making points within groups
 SET TRANSACTION - specify characteristics of the transaction

También podría gustarte