Triggers, Funciones Y Procedimientos - DAM

Transcription

Jorge Domínguez ChávezMySQLTriggers, Funciones y Procedimientos2015

2015 Jorge Domínguez ChávezEsta obra se distribuye bajo licencia Creative ocimientopermite a otros copiar, distribuir, exhibir, y realizar su trabajo conderechos de autor y trabajos derivados basados en ella - pero sólo si ellosdan crédito de la manera que usted solicite.Atribución:permite que otros distribuyan trabajos derivados sólo bajoidéntica a la licencia que rige el trabajo original.Compartir Igual:unalicencia 2015 Jorge Domínguez ChávezISBNPublicado por IEASS, Editores.www.ieass.com.veVenezuela, 2015La portada y contenido de este libro ha sido creado en LibreOffice Versión: 4.4.1.2

PROLOGOHoy, mientras leía mensajes del correo antiguo rescaté unos apuntes de miscursos de programación que dicté en los últimos años. Los apuntes eran de MySQL,más específicamente sobre triggers, funciones y procedimientos almacenados(ps) y todo eso que MySQL implementa a partir de su versión 5.MySQL ha sido siempre un motor de bases de datos muy rápido y muy utilizadopara proyectos open source de código abierto, sobre todo para proyectos web dadasu gran velocidad. Se ha convertido en la actualidad en una solución viable y demisión critica para la administración de datos. Antes, MySQL se consideraba comola opción ideal para sitios Web; sin embargo, ahora incorpora muchas de lasfunciones necesarias para otros entornos y conserva su gran velocidad. MySQLsupera desde hace tiempo a muchas soluciones comerciales en velocidad y disponede un sistema de permisos elegante y potente, y ahora, ademas, desde la versión 4incluye el motor de almacenamiento InnoDB compatible con ACID.Pero también asido muy criticado por la falta de características avanzadas que otros SistemasGestores de Bases de Datos, como Oracle, Informix, SQLServer de Microsoft oPostgreSQL tienen.MySQL es un sistema gestor de bases de datos (SGBD, DBMS por sus siglas eninglés) muy conocido y ampliamente usado por su simplicidad y notablerendimiento. Además está implementado algunas características avanzadasdisponibles en otros SGBD del mercado, es una opción atractiva tanto paraaplicaciones comerciales, como académicas y/o de entretenimiento precisamentepor su facilidad de uso y tiempo reducido de puesta en marcha. Esto y su libredistribución en Internet bajo licencia GPL le otorgan como beneficios adicionales(no menos importantes) contar con un alto grado de estabilidad y un rápidodesarrollo.MySQL está disponible para múltiples plataformas, la seleccionada para losejemplos de este libro es GNU/Linux. Sin embargo, las diferencias con cualquier otraplataforma son prácticamente nulas, ya que la herramienta utilizada en este caso esel cliente mysql-client, que permite interactuar con un servidor MySQL (local oi

remoto) en modo texto. De este modo es posible realizar los ejercicios sobre unservidor instalado localmente o, a través de Internet, sobre un servidor remoto.Para la realización de las actividades, es imprescindible que dispongamos de losdatos de acceso del usuario administrador de la base de datos. Aunque en algunos deellos los privilegios necesarios serán menores, para los capítulos que tratan laadministración del SGBD será imprescindible disponer de las credenciales deadministrador.Estas características avanzadas son los procedimientos almacenados, triggers,transacciones y demás cosas.HISTORIA DE MYSQLEmpezamos con la intención de usar mSQL para conectar a nuestras tablasutilizando nuestras propias rutinas rápidas de bajo nivel (ISAM). Sin embargo y trasalgunas pruebas, llegamos a la conclusión que mSQL no era lo suficientementerápido o flexible para nuestras necesidades. Esto provocó la creación de una nuevainterfaz SQL para nuestra base de datos pero casi con la misma interfaz API quemSQL. Esta API fue diseñada para facilitar código de terceras partes que fue escritopara poder usarse con mSQL para ser fácilmente portado para el uso con MySQL.La derivación del nombre MySQL no está clara. Nuestro directorio base y un grannúmero de nuestras bibliotecas y herramientas han tenido el prefijo "my" por másde 10 años. Sin embargo, la hija del cofundador Monty Widenius también se llamaMy. Cuál de los dos dió su nombre a MySQL todavía es un misterio, incluso paranosotros.El nombre del delfín de MySQL (el logo) es "Sakila", que fué elegido por losfundadores de MySQL AB de una gran lista de nombres sugerida por los usuarios enel concurso "Name the Dolphin" (ponle nombre al delfín). El nombre ganador fueenviado por Ambrose Twebaze, un desarrollador de software Open Source deSwaziland, África. Según Ambrose, el nombre femenino de Sakila tiene sus raíces enSiSwate, el idioma local de Swaziland. Sakila también es el nombre de una ciudad enArusha, Tanzania, cerca del país de origen de Ambrose, Uganda.ii

Este libro te enseña a emplear los triggers, las funciones y los procedimientos enel gestor de base de datos MySQL; así como a trabajar en línea de comando clientemysql de MySQL. Antes de comenzar, deberías saber:1.cómo introducir comandos en la línea de comandos2.tu contraseña y nombre de usuario de MySQL3.el nombre de la base de datos MySQL a la que quieres acceder4.la dirección ip o el hostmane del servidor de la base de datos (si no está entu local host)Este libro tiene 4 secciones:1. Introducción- Es lo que estás leyendo ahora mismo.2. Triggers- Cómo programar, ejecutar los triggers y entender sufuncionamiento y sintaxis. (insert, update, delete)3. Funciones- Cómo programar, ejecutar las funciones y entender suoperación y sintaxis. Ejemplos de SELECT.4. Procedimientos- Cómo programar, ejecutar losalmacenados (PS) y entender su funcionamiento y sintaxis.procedimientosEste libro está diseñado para enseñarte las bases de la obtención de informacióndentro y fuera de una base de datos MySQL existente, utilizando la línea decomando cliente MySQL.El libro NO es una referencia completa, y no trata ni de lejos ningún tipo detópicos avanzados. Es simplemente una toma de contacto rápida para la utilizaciónde la línea de comando mysql de MySQL.Este material ha sido preparado de mis clases en las cátedras de base de datos,programación PHP, administración de base de datos.iii

DEDICATORIAA las dos grandes mujeres en mi vida: mi Madre Amparo y mi esposa Dianella.Jorgeiv

INDICEÍndice de contenidoPROLOGO.1Historia de lo 1.3Triggers.3¿Qué es un trigger?.3Sintaxis de un trigger.4Identificadores NEW y OLD en Triggers.5Triggers BEFORE y AFTER.5¿Qué utilidades tienen los Triggers?.6Auditoria.6Reglas de negocio.6Validación de er BEFORE en la sentencia UPDATE.7Trigger AFTER en la sentencia UPDATE.8información de un Trigger.11Eliminar un Trigger.11Tipos de Trigger.18Almacenamiento de los trigger.20¿Cómo construir un trigger condicional?.32Funciones.37¿Qué es un procedimiento almacenado?.37sintaxis.38Uso de las variables en funciones.48procedimientos.51variables dentro de los procedimientos.54IF THEN ELSE.54SWITCH.55COMPARACIÓN DE CADENAS.55USO DE WHILE.56v

USO DEL REPEAT.56LOOP LABEL.57REFERENCIAS.62vi

INTRODUCCIÓNEl libro está pensado para ser desarrollado por una persona que tiene unconocimiento intermedio de programación. El objetivo es aprender MySQL enforma sencilla viendo un concepto teórico, luego algunos ejercicios resueltos y porúltimo y lo más importante efectuar una serie de ejercicios. Puede desarrollar losejercicios en el libro, probarlos y ver los resultados. Un conocimiento profundo deMySQL facilitará el desarrollo de páginas dinámicas con PHP que acceden a unabase de datos MySQL.Mientras que para llevar una contabilidad, una agenda de contactos, facturas,etc., almacenar datos “alfanuméricas” sirve cualquier producto del mercado, el“motor” o “gestor” de un sistema de gestión documental tiene unos requisitos másexigentes. Hace muchos años que la continua evolución del hardware ha resuelto losproblemas de capacidad y rendimiento que plantea guardar en un PC corriente unarchivo con 40, 50, 300 mil o más registros. Los datos “alfanuméricos”, nombres,apellidos, números de teléfono, cuentas contables ocupan unos cuantos bytes y, pormuchos que tengamos, siempre hablamos de kilobytes. Unos pocos “Megas” a losumo. ¿Qué son 3 o 4 MegaBytes en un PC que tiene un disco duro con 1 TeraByte.Es un problema resuelto.Ahora un “registro” de la base de datos, cada uno de los elementos que lacomponen, es un archivo. Puede ser un documento con texto (20, 30, 140Kb ), PDF(50, 100, 200Kb), hoja electrónica de cálculo (otro tanto). Puede que tenga imágenes,logotipos, fotos, documentos escaneados con una buena resolución, con lo que ya elorden de magnitud empieza a ser de Mb, más que Kb. No es difícil que un usuarioincorpore 2 o 3 mil documentos al año con lo que nos empezamos a mover (en unaPYME de 10 usuarios) en cifras de varios Gb anuales. Esto ya no es fácil degestionar. Y menos sencillo es garantizar un rendimiento adecuado al introducir losnuevos documentos, y al consultar los existentes.Ahora que ya ha decidido lo que quiere, la pregunta de siempre: ¿cual elegir?Porque, como pasa con todo en la sociedad actual, la oferta es enorme, variada y confrecuencia contradictoria. Unos comentarios sobre cómo y porqué elegimos1

nosotros la base de datos sobre la que “montar” nuestra aplicación. (En realidad, máscorrecto es decir SGBD, sistema de gestión de base de datos).Primera decisión: software libre o propietario. ¡Ya estamos otra vez! Y es máscomplicado aún, porque puedes implementar un programa desarrollado con unlenguaje “propietario” como Delphi, Visual net o Visual Basic, sobre un SGBD libre,o no, y, a su vez, sobre un servidor con Linux o Windows Server o UNIX.Si solamente nos centramos en la base de datos (SGBD):“Libres” o gratuitas hay varias: MySQL, PostgreSQL, SQLite3, MariaDB, Firebird,las cuatro primeras son las más conocidas y, sin duda, son válidas para un proyecto,por complicado que sea. Los sistemas GNU/Linux o software libre o de códigoabierto ya no son una novedad más, son una realidad 1.“Propietarias” hay más. Dejando de lado las menos “potentes”, dBASE (un clásico,pero muy superada), FileMaker, Interbase, Access. Tenemos las dos más conocidas,Oracle y SQL Server de Microsoft, además de IBM DB2, Informix, Progress.Y un tercer grupo, las “super-propietarias”. Las creadas por empresas,normalmente pequeñas, a medida para su programa de gestión, documental o no.¿Cual elegir? La respuesta es muy sencilla: todas sirven. Todas. Esto ya estáinventado. Cualquiera de ellas es válida, si se configura y utiliza bien. La decisión noes en función de que sirva o no para mi necesidad. Seguro que sirve. La decisiónestará basada en otras características.Evitamos las “exóticas” (en PYMES, insisto, como Progress, Informix) porque esdifícil conseguir ayuda técnica cuando tienes un problema. Un argumento definitivopara los programadores.En cuanto al software libre, es casi una decisión filosófica. Es como ser usuario deMac, o tener un iPhone. O como convencer al que tiene una Canon reflex fabulosade que las Nikon son mejores. El software libre es una decisión válida ytécnicamente irreprochable. Y lo es, igualmente, montar Oracle. Hay espacio paratodos y hay aplicaciones estupendas en los dos sistemas. No van a ser mejores opeores los programas, ni los usuarios van a trabajar mejor, por el hecho de haber1http://www.linuxjournal.com2

elegido uno u otro gestor de base de datos. La clave está en el software, en elinterfaz de usuario, en la facilidad de uso, y eso es independiente de la tecnología.Todo depende del uso que haga de MySQL y de nuestro conocimiento yexperiencia sobre él.Por lo tanto, el objetivo de este libro es que aprendamos a programardisparadores, procedimientos, y funciones en MySQL.Un trigger es un objeto asociado a una tabla que es ejecutado cuando sucede unevento en la tabla propietaria. Son aquellas sentencias (INSERT, UPDATE, DELETE)que modifican los datos, sujetos o no a ciertas condiciones, dentro de una tabla. Sólopuede haber un trigger de cada insert, update y delete por tabla o vista.Los procedimientos son códigos que se ejecutan directamente en el servidor. Unprocedimiento se invoca usando un comando CALL, y sólo puede pasar valoresusando variables de salida.Una función puede llamarse desde dentro de un comando como cualquier otrafunción (esto es, invocando el nombre de la función), y puede retornar un valorescalar. Las rutinas almacenadas pueden llamar otras rutinas almacenadas.Tanto los triggers, los procedimientos y las funciones se asocian con la base dedatos abierta, en uso.Y como nada hacen más que la práctica, Para captar mejor la teoría, se haránmuchos ejercicios con los alumnos, para probar la teoría y verificar la integración dela materia.También, el alumno podrá copiar sus códigos en un pendrive (memoria usb) odisco externo o a DropBox al fin del curso para llevarse, con propósito de seguir lapráctica en su hogar.3

CAPÍTULO 1TRIGGERS¿QUÉ ES UN TRIGGER?Desde la aparición de la versión 5.0.3 de la base de datos MySQL, se haimplementado la posibilidad de desarrollar triggers para las tablas de una base dedatos. Recordar que un trigger es un objeto asociado a una tabla que es ejecutadocuando sucede un evento en la tabla propietaria. Son aquellas sentencias (INSERT,UPDATE, DELETE) que modifican los datos dentro de una tabla. Sólo puede haberun trigger de cada insert, update y delete por tabla o vista.Pero los triggers tienen una ventaja obvia. Es código que se ejecuta en el servidorde la base de datos, y no en la máquina cliente.Un Trigger o Disparador es un programa almacenado(stored programo SP),creado para ejecutarse automáticamente cuando ocurra un evento en una tabla ovista de la base de datos. Dichos eventos son generados por los comandos INSERT,UPDATE y DELETE, los cuales forman parte del DM 2 (Data Modeling Language) deSQL[1].Un Disparador nunca se llama directamente, en cambio, cuando una aplicación ousuario intenta insertar, actualizar, o anular una fila en una tabla, la acción definidaen el disparador se ejecuta automáticamente (se dispara).Las ventajas de los triggers son varias:1. La entrada en vigor automática de restricciones de los datos, hace que losusuarios entren sólo valores válidos.2. El mantenimiento de la aplicación se reduce, los cambios a un disparador serefleja automáticamente en todas las aplicaciones que tienen que ver con la2Los TRIGGERS DDL tiene una particularidad adicional sobre los de tipo DML y es que no tiene muchosentido las tablas inserted y deleted ya que el tipo de operaciones que disparan los triggers son radicalmentediferentes. Sin embargo, como ellos necesitan recibir información acerca del evento que ha ocasionado que eltrigger se dispare, para ello existe la función EVENTDATA()4

tabla sin la necesidad de recompilar o enlazar.3. Logs automáticos de cambios a las tablas. Una aplicación puede guardar unregistro corriente de cambios, creando un disparador que se active siempreque una tabla se modifique.4. La notificación automática de cambios a la Base de Datos con alertasde evento en los disparadores.Decimos que los Triggers se invocan para ejecutar un conjunto de instruccionesque protejan, restrinjan, actualicen o preparen la información de las tablas, almomento de manipular la información. Para crear triggers son necesarios losprivilegios SUPER y TRIGGER.SINTAXIS DE UN TRIGGERUsamos la siguiente sintaxis:CREATE [DEFINER {usuario CURRENT USER}]TRIGGER nombre del trigger {BEFORE AFTER} {UPDATE INSERT DELETE}ON nombre de la tablaFOR EACH ROW bloque de instrucciones Obviamente la sentencia CREATE es conocida para crear nuevos objetos en labase de datos. Explicación de las partes de la definición: DEFINER {usuario CURRENT USER}: Indica al gestor de bases dedatos qué usuario tiene privilegios en su cuenta, para la invocación de lostriggers cuando surjan los eventos DML. Por defecto esta característica tieneel valor CURRENT USER que hace referencia al usuario actual que estacreando el Trigger. nombre del trigger: Indica el nombre del trigger. Por defecto existeuna nomenclatura práctica para nombrar un trigger, la cual da mejorlegibilidad en la administración de la base de datos. Primero, escriba el5

nombre de tabla, luego especifique con la inicial de la operación DML yseguido usamos la inicial del momento de ejecución (AFTER o BEFORE).Por ejemplo:-- BEFORE INSERT clientes BI TRIGGER BEFORE AFTER: Especifica si el Trigger se ejecuta antes o después delevento DML. UPDATE INSERT DELETE: Aquí elija que sentencia usa para que seejecute el Trigger. ON nombre de la tabla: En esta sección establece el nombre de latabla asociada. FOR EACH ROW: Establece que el Trigger se ejecute por cada fila en la tablaasociada. bloque de instrucciones : Define el bloque de sentencias que elTrigger ejecuta al ser invocado.IDENTIFICADORES NEW Y OLD EN TRIGGERSSi requiere relacionar el trigger con columnas especificas de una tabla debemosusar los identificadores OLD y NEW.OLD indica el valor antiguo de la columna y NEW el valor nuevo que pudiesetomar. Por ejemplo: OLD.idproducto o NEW.idproducto.Si usa la sentencia UPDATE se refiere a un valor OLD y NEW, ya que modificaregistros existentes por los valores. En cambio, si usa INSERT sólo usa NEW, yaque su naturaleza es únicamente de insertar nuevos valores a las columnas. Y conDELETE usa OLD debido a que borra valores existentes.6

TRIGGERS BEFORE Y AFTEREstas clausulas indican si el Trigger se ejecuta BEFORE (antes) o AFTER(después) del evento DML. Hay ciertos eventos que no son compatibles con estassentencias.Sí tiene un Trigger AFTER que se ejecuta en una sentencia UPDATE, es ilógicoeditar valores nuevos NEW, sabiendo que el evento ya ocurrió. Igual ocurre con lasentencia INSERT, el Trigger tampoco podría hacer referencia a valores NEW, yaque los valores que en algún momento fueron NEW, han pasado a ser OLD.¿QUÉ UTILIDADES TIENEN LOS TRIGGERS?Con los Triggers implementamos varios casos de uso que mantengan laintegridad de la tabla de la base de datos, como Validar información, Calcularatributos derivados, Seguimiento de movimientos de datos en tablas de la base de datos,etc.Cuando surja una necesidad para que se ejecute una acción implícitamente (sinejecución manual) sobre los registros de una tabla, considera el uso de un Trigger.Aunque los triggers sirven en su mayoría para mantener la integridad de la basede datos también pueden usarse para:AUDITORIA Los triggers se usan para llenar tablas de auditoría, en donde se registrenciertos tipos de transacciones o accesos hacia tablas.REGLAS DE NEGOCIO Cuando ciertas reglas de negocio son muy elaboradoras y necesitan serexpresadas a nivel base de datos, es necesario que además de reglas yrestricciones se utilicen triggers.VALIDACIÓN DE DATOS Los triggers pueden controlar ciertas acciones, por ejemplo: puedenrechazar o modificar ciertos valores que no cumplan determinadas reglas,7

para prevenir que datos inválidos sean insertados en la base.SEGURIDAD Refuerzan las reglas de seguridad de una aplicación. Ofrecen verificación de seguridad basada en valores. Integridad de los datos mejorada. Fuerzan restricciones dinámicas de integridad de datos y de integridadreferencial. Aseguran que las operaciones relacionadas se realizan juntas de formaimplícita. Respuesta instantánea ante un evento auditado. Ofrece un mayor control sobre la Base de Datos.DESVENTAJAS Hay que definir con anticipación la tarea que realizara el trigger Peligro de pérdida en Reorganizaciones. Hay que programarlos para cada DBMS. Un Trigger nunca se llama directamente. Los triggers no se desarrollan pensando en un sólo registro, los mismosdeben funcionar en conjunto con los datos ya que se disparan por operacióny no por registro. Por funcionalidad, no hay que poner en uno solo las funciones de INSERT,UPDATE y DELETE. Utilizar moderadamente los triggers. No se pueden utilizar en tablas temporales.8

APLICACIONESTRIGGER BEFORE EN LA SENTENCIA UPDATEA continuación, un Trigger que valida la edad de un cliente antes de unasentencia UPDATE. Si por casualidad el nuevo valor es negativo, entoncesasignamos NULL a este atributo.DELIMITER //3CREATE TRIGGER cliente BU TriggerBEFORE UPDATE ON cliente FOR EACH ROWBEGIN-- La edad es negativa?IF NEW.edad 0 THENSET NEW.edad NULL;END IF;END// DELIMITER;Este Trigger se ejecuta antes de haber insertado el registro, lo que nos da elpoder de verificar primero si el nuevo valor de la edad esta en el rango apropiado, sino es así entonces asignamos NULL a ese campo.TRIGGER AFTER EN LA SENTENCIA UPDATESuponga el siguiente escenario: Tienda de accesorios para Gamers. Para laactividad del negocio se ha creado un sistema de facturación sencillo, que registralas ventas realizadas dentro de una factura que contiene el detalle de las compras.La tienda tiene 4 vendedores de turno, los cuales se encargan de registrar lascompras de los clientes en el horario de funcionamiento.Implementamos un Trigger que guarde los cambios realizados sobre la tablaDETALLE FACTURA de la base de datos realizados por los vendedores.3Los delimitadores pueden ser // o && o .9

Solución:DELIMITER //CREATE TRIGGER detalle factura AU TriggerAFTER UPDATE ON detalle factura FOR EACH ROWBEGININSERT INTO log updates (idusuario, descripcion)VALUES (user(), CONCAT('Se modificó el registro ','(',OLD.iddetalle,',', ', OLD.unidades,') por ','(', NEW.iddetalle,',', ', NEW.unidades,')'));END//DELIMITER;Con este registro de logs sabemos si algún vendedor "ocioso" esta alterando lasfacturas, lo que lógicamente sería atentar contra las finanzas del negocio. Cadaregistro informa el usuario que modificó la tabla DETALLE FACTURA y muestrauna descripción sobre los cambios en cada columna.Trigger BEFORE en la sentencia INSERTEn el siguiente ejemplo se muestra como mantener la integridad de una base dedatos con respecto a un atributo derivado.La Tienda de electrodomésticos ha implementado un sistema de facturación. Enla base de datos que soporta la información del negocio, existen varias tablas, peronos centramos en la tabla PEDIDO y en la tabla TOTAL VENTAS.TOTAL VENTAS almacena las ventas totales que se han hecho a cada clientedel negocio. Es decir, si el cliente Armado Barreras en una ocasión compró 1000Bolívares Fuertes, luego compró 1250 Bolívares Fuertes y hace poco ha vuelto acomprar 2000 Bolívares Fuertes, entonces el total vendido a este cliente es de 4250Bolívares Fuertes.10

Pero suponga que elimina el ultimo pedido hecho por este cliente, ¿que pasaríacon el registro en TOTAL VENTAS? quedaría desactualizado.Usamos tres Triggers para solucionar esta situación. Para que cada vez que useun comando DML en la tabla PEDIDO, no tenga que preocuparse por actualizarmanualmente TOTAL VENTAS.Solución:-- TRIGGER PARA INSERTDELIMITER //CREATE TRIGGER PEDIDO BI TRIGGERBEFORE INSERT ON PEDIDOFOR EACH ROWBEGINDECLARE cantidad filas INT;SELECT COUNT(*)INTO cantidad filasFROM TOTAL VENTASWHERE idcliente NEW.idcliente;IF cantidad filas 0 THENUPDATE TOTAL VENTASSET total total NEW.totalWHERE idcliente NEW.idcliente;ELSEINSERT INTO TOTAL tal);END IF;END//11

-- TRIGGER PARA UPDATECREATE TRIGGER PEDIDO BU TRIGGERBEFORE UPDATE ON PEDIDOFOR EACH ROWBEGINUPDATE TOTAL VENTASSET total total (NEW.total-OLD.total)WHERE idcliente NEW.idcliente;END//-- TRIGGER PARA DELETECREATE TRIGGER PEDIDO BD TRIGGERBEFORE DELETE ON PEDIDOFOR EACH ROWBEGINUPDATE TOTAL VENTASSET total total-OLD.totalWHERE idcliente OLD.idcliente;END//Con ellos mantiene el total de ventas de cada cliente actualizado dependiendo delevento realizado sobre un pedido.Si inserta un nuevo pedido generado por un cliente existente, entonces vamos ala tabla TOTAL VENTAS y actualiza el total comprado por ese cliente con unasencilla suma acumulativa.Ahora, si cambia el monto de un pedido, vamos a TOTAL VENTAS paradescontar el monto anterior y adicionar el nuevo monto.Y si elimina un pedido de un cliente simplemente descuenta del total acumuladoel monto que con anterioridad había acumulado.12

INFORMACIÓN DE UN TRIGGERSi usa el comando SHOW CREATE TRIGGER y rápidamente estás viéndolasespecificaciones de tu Trigger creado. Observa el siguiente ejemplo:SHOW CREATE TRIGGER futbolista ai trigger;También ve los Triggers que hay en su base de datos con:SHOW TRIGGERS;ELIMINAR UN TRIGGERDROP, DROP y más DROP. Como ya sabe usamos este comando para eliminarcasi cualquier cosa en la base de datos:DROP TRIGGER [IF EXISTS] nombre triggerRecuerde que puede adicionar la condición IF EXISTS para indica que si elTrigger ya existe, entonces que lo borre.Veamos el manejo de triggers mediante sencillas aplicaciones, que consisten enuna base de datos con 2 tablas. Una de apuntes contables y otra de saldos mensualesque se van actualizando según vayamos insertando, modificando o eliminadoapuntes.Creamos un archivo de texto llamado EJEMPLO1.SQL Que almacena nuestrocódigo SQL que de ahora en adelante estará en negrita.- Creamos la base de datos:DROP DATABASE IF EXISTS contable;CREATE DATABASE contable;USE contable; Creamos las tablas apuntes y saldos del tipo InnoDB, con una clave primariapara identificar cada registro de la tabla como único.DROP TABLE IF EXISTS APUNTES;CREATE TABLE APUNTES (13

ASIENTO INT(8) DEFAULT 0,LINEA SMALLINT(5) DEFAULT 0,FECHA DATE DEFAULT ‘2014-01-01’,TEXTO VARCHAR(40) default '',CUENTA CHAR(10) default '',DEBE DOUBLE(10,2) DEFAULT 0,HABER DOUBLE(10,2) DEFAULT 0,PRIMARY KEY (ASIENTO,LINEA),KEY K2(CUENTA, FECHA)) ENGINE InnoDB ROW FORMAT DYNAMIC; Creamos la tabla Saldos, también con una clave primaria única.DROP TABLE IF EXISTS SALDO;CREATE TABLE SALDO (CUENTA CHAR(10) NOT NULL default '',ANO SMALLINT(4) DEFAULT 0,MES TINYINT(2) DEFAULT 0,DEBE DOUBLE(10,2) DEFAULT 0,HABER DOUBLE(10,2) DEFAULT 0,PRIMARY KEY (CUENTA,ANO,MES))ENGINE InnoDB ROW FORMAT DYNAMIC; Procedemos a crear los Triggers, para la tabla apuntes. Primero el trigger de inserción de registros. Atención a los delimitadores y alpuntoycomadefinaldesentencia.Remarcar que los saldos se actualizan después de ingresar un registro en latabla apuntes (AFTER INSERT).Considere la orden: INSERT INTO ON DUPLICATE KE

más específicamente sobre triggers, funciones y procedimientos almacenados (ps) y todo eso que MySQL implementa a partir de su versión 5. MySQL ha sido siempre un motor de bases de datos muy rápido y muy utilizado para proyectos open source de código abierto, sobre todo para proyectos web dada su gran velocidad.