Jump to content

Trigger en mysql


valdiluvio

Recommended Posts

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

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 by Nakata
Link to comment
Share on other sites

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 by xomarx69
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...