valores update una trigger tabla registros para modificar misma insertar hacer despues como comando campo and actualizar mysql sql-update triggers

una - trigger mysql insert and update



mysql después del disparador de inserción que actualiza la columna de otra tabla (4)

Con sus requisitos, no necesita BEGIN END e IF con SELECT innecesario en su desencadenador. Entonces puedes simplificarlo a esto

CREATE TRIGGER occupy_trig AFTER INSERT ON occupiedroom FOR EACH ROW UPDATE BookingRequest SET status = 1 WHERE idRequest = NEW.idRequest;

Estoy intentando escribir un disparador, tengo las siguientes tablas: BookingRequest:

+-----------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+---------+------+-----+---------+----------------+ | idRequest | int(11) | NO | PRI | NULL | auto_increment | | roomClass | int(11) | NO | | NULL | | | inDate | date | NO | | NULL | | | outDate | date | NO | | NULL | | | numOfBeds | int(11) | NO | | NULL | | | status | int(11) | NO | MUL | NULL | | | idUser | int(11) | NO | MUL | NULL | | +-----------+---------+------+-----+---------+----------------+

tabla de estado:

+------------+--------------------------------------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------------------------------------------+------+-----+---------+-------+ | idStatus | int(11) | NO | PRI | NULL | | | nameStatus | enum(''underConsideration'',''approved'',''rejected'') | YES | | NULL | | +------------+--------------------------------------------------+------+-----+---------+-------+

Habitación ocupada:

+--------------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------+------+-----+---------+----------------+ | idOccupation | int(11) | NO | PRI | NULL | auto_increment | | idRoom | int(11) | NO | | NULL | | | idRequest | int(11) | NO | | NULL | | +--------------+---------+------+-----+---------+----------------+

Necesito un disparador que cambiará el estado en BookingReques a 1 si la solicitud con el mismo ID se inserta en la tabla de la Habitación Ocupada, así que intenté algo como esto

create trigger occupy_trig after insert on OccupiedRoom for each row begin if BookingRequest.idRequest= NEW.idRequest then update BookingRequest set status = ''1''; where idRequest = NEW.idRequest; end if; END;

y no funciona, por lo que cualquier sugerencia sería muy acertada


Prueba esto:

DELIMITER $$ CREATE TRIGGER occupy_trig AFTER INSERT ON `OccupiedRoom` FOR EACH ROW begin DECLARE id_exists Boolean; -- Check BookingRequest table SELECT 1 INTO @id_exists FROM BookingRequest WHERE BookingRequest.idRequest= NEW.idRequest; IF @id_exists = 1 THEN UPDATE BookingRequest SET status = ''1'' WHERE idRequest = NEW.idRequest; END IF; END; $$ DELIMITER ;


Tal vez elimine el punto y coma después de establecer porque ahora la instrucción where no pertenece a la declaración de actualización. Además, idRequest podría ser un problema, mejor escribir BookingRequest.idRequest


DELIMITER // CREATE TRIGGER contacts_after_insert AFTER INSERT ON contacts FOR EACH ROW BEGIN DECLARE vUser varchar(50); -- Find username of person performing the INSERT into table SELECT USER() INTO vUser; -- Insert record into audit table INSERT INTO contacts_audit ( contact_id, deleted_date, deleted_by) VALUES ( NEW.contact_id, SYSDATE(), vUser ); END; // DELIMITER ;