valdiluvio Posted February 15, 2013 Report Share Posted February 15, 2013 Les cuento, mir problema es el siguiente:tengo 3 tablas que son usuario DROP TABLE IF EXISTS pru.usuario; CREATE TABLE `usuario` ( `id_usuario` int(11) NOT NULL AUTO_INCREMENT, `nombre_usuario` varchar(50) NOT NULL, `apellido_usuario` varchar(50) NOT NULL, PRIMARY KEY (`id_usuario`) ) libro DROP TABLE IF EXISTS pru.libro; CREATE TABLE `libro` ( `id_libro` int(11) NOT NULL AUTO_INCREMENT, `nombre_libro` varchar(50) NOT NULL, `stock_libro` int(11) NOT NULL, PRIMARY KEY (`id_libro`) ) y prestamo DROP TABLE IF EXISTS pru.prestamo; CREATE TABLE `prestamo` ( `id_prestamo` int(11) NOT NULL AUTO_INCREMENT, `id_usuario` int(11) NOT NULL, `id_libro` int(11) NOT NULL, `cantidad_prestamo` int(11) NOT NULL, PRIMARY KEY (`id_prestamo`), KEY `id_libro` (`id_libro`), KEY `id_usuario` (`id_usuario`) ) el problema es que quiero crear un trigger que automáticamente descuente el campo stock_libro de la tabla libro lo he intentado pero recién estoy aprendiendo la sintaxis, lo que tengo es esto trigger CREATE TRIGGER `pru`.actualiza_stock AFTER INSERT ON prestamo FOR EACH ROW begin declare @stcok int select @stock = stock_libro from libro, prestamo where libro.id_libro = prestamo.id_libro update libro set stock_libro = stock_libro-cantidad_prestamo from libro,prestamo where prestamo.id_libro = libro.id_libro end Ojala me puedan ayudar ya que llevo un par de días pegado en esto Link to comment Share on other sites More sharing options...
Nakata Posted February 15, 2013 Report Share Posted February 15, 2013 (edited) Lo unico "raro" que veo es la variable stock: CREATE TRIGGER `pru`.actualiza_stock AFTER INSERT ON prestamo FOR EACH ROW begin declare @stcok int select @stock = stock_libro from libro, prestamo where libro.id_libro = prestamo.id_libro update libro set stock_libro = stock_libro-cantidad_prestamo from libro,prestamo where prestamo.id_libro = libro.id_libro end No se si sera un error de tipeo al escribir el post, o lo tengas asi en el mysql, revisa y avisas. Edited February 15, 2013 by Nakata Link to comment Share on other sites More sharing options...
xomarx69 Posted February 15, 2013 Report Share Posted February 15, 2013 (edited) Hola amigo, que te parece esto: delimiter //drop trigger if exists actualiza_stock;CREATE TRIGGER actualiza_stock AFTER INSERT ON prestamo FOR EACH ROW begin update libro set stock_libro = stock_libro-NEW.cantidad_prestamo where id_libro = NEW.id_libro;end// De todas formas no te recomiendo hacer uso de triggers para esto, si vas a usar el trigger , deberás agregar una constraint que te permita validar que el stock en libro no baje de 0 Por lo general sólo uso triggers que afectan a la tabla que lo gatilla, nunca uso triggers que afecten a otras tablas ya que la mantención de la base se puede complicar mucho. También existen casos en los que los triggers son perjudiciales, como cuando ejecutas procesos sobre los que no puedes hacer rollback.En este caso te recomiendo generar un SP que contenga el mismo código del trigger, así ejecutas el insert y el SP dentro de la misma transacción. Saludos Edited February 15, 2013 by xomarx69 Link to comment Share on other sites More sharing options...
Ra Posted February 16, 2013 Report Share Posted February 16, 2013 Se mueve Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now