{"id":1163,"date":"2024-07-31T11:36:30","date_gmt":"2024-07-31T09:36:30","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=1163"},"modified":"2024-07-31T11:36:30","modified_gmt":"2024-07-31T09:36:30","slug":"39-triggers-o-disparadores","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/databases\/sql\/39-triggers-o-disparadores\/","title":{"rendered":"39. Triggers o disparadores"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Los <strong>triggers<\/strong> son objetos que se utilizan para ejecutar de forma autom\u00e1tica una acci\u00f3n en respuesta a ciertos <strong>eventos<\/strong> dentro de la <strong>base de datos<\/strong>. Es como los <strong>manejadores de eventos<\/strong> en <strong>Javascript<\/strong> pero en <strong>bases de datos<\/strong>. Estos <strong>eventos<\/strong> se van a disparar cuando se lleguen a ejecutar entre la base de datos alguna operaci\u00f3n que afecte datos, es decir, un <strong><em>INSERT,<\/em><\/strong> un <strong><em>UPDATE<\/em><\/strong> o un <strong><em>DELETE.<\/em><\/strong><\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Los <strong>triggers<\/strong> manejan una sintaxis, es como un <strong>stored procedure,<\/strong> s\u00f3lo que este lo tienes que lanzar, mientras que los <strong>triggers<\/strong> se ejecutan cuando se genera un <strong><em>INSERT,<\/em> <em>DELETE<\/em><\/strong> o <strong><em>UPDATE,<\/em><\/strong> y puede pegar informaci\u00f3n a una <strong>tabla.<\/strong>&nbsp; Como un <strong>trigger<\/strong> puede tener m\u00e1s de una linea de c\u00f3digo, sigue la l\u00f3gica vista en los <strong>disparadores.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los <strong>triggers<\/strong> tienen una sintaxis muy particular.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sintaxis<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">DELIMITER \/\/\n\nCREATE TRIGGER nombre_trigger\n  [BEFORE | AFTER]\n  [INSERT | UPDATE | DELETE]\n  ON nombre_tabla\n  FOR EACH ROW\nBEGIN\n\nEND  \nDELIMITER ;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a aprovechar el ejercicio del cap\u00edtulo de los <strong>disparadores,<\/strong> y vamos a crear una <strong>tabla<\/strong> m\u00e1s, denominada <em>actividad_clientes<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">CREATE TABLE actividad_clientes (\nac_ci INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,\ncliente INT UNSIGNED,\nfecha DATETIME,\nFOREIGN KEY (cliente)\n REFERENCES clientes(cliente_id)\n ON DELETE RESTRICT\n ON UPDATE CASCADE\n);<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Esta <strong>tabla<\/strong> la relacionamos con el cliente y almacenamos la fecha porque lo que nos interesa es llevar un registro de cuando fueron las actividades de los clientes, de tal manera que podamos sacar un reporte de los mismos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sigamos trabajando en el ejm<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">SELECT * FROM subscripciones;\nSELECT * FROM clientes;\nSELECT * FROM tarjetas;\nSELECT * FROM servicios;\nSELECT * FROM actividad_clientes;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a hacer que cuando creemos un nuevo servicio, autom\u00e1ticamente vaya a la <strong>tabla<\/strong> <em>actividad_clientes<\/em> y cree un registro de las actividades de los clientes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sigamos con nuestro ejm, y vamos a crear el c\u00f3digo del <strong>trigger.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">DELIMITER \/\/\n\nCREATE TRIGGER  tg_actividad_clientes\n AFTER INSERT\n ON clientes\n FOR EACH ROW\n\n BEGIN\n  INSERT INTO actividad_cliente VALUES (0, NEW.cliente_id, NOW()) \n END \/\/\n \n\nDELIMITER ;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Para ver los <strong>triggers<\/strong> de una base de datos se ejecuta la siguiente consulta<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sintaxis<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">SHOW TRIGGERS FROM base_de_datos;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Para eliminar un <strong>trigger<\/strong> se utiliza la siguiente sintaxis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sintaxis<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">DROP TRIGGER nombre_trigger;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Los triggers son objetos que se utilizan para ejecutar de forma autom\u00e1tica una acci\u00f3n en respuesta a ciertos eventos dentro de la&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1076,"menu_order":38,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-1163","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"Los triggers son objetos que se utilizan para ejecutar de forma autom\u00e1tica una acci\u00f3n en respuesta a ciertos eventos dentro de la...","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1163","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1163"}],"version-history":[{"count":1,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1163\/revisions"}],"predecessor-version":[{"id":1164,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1163\/revisions\/1164"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1076"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1163"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}