다른 테이블의 열을 업데이트하는 삽입 트리거 후 mysql
트리거를 작성하려고 하는데 다음 표가 있습니다.예약 요청:
+-----------+---------+------+-----+---------+----------------+
| 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 | |
+-----------+---------+------+-----+---------+----------------+
상태 테이블:
+------------+--------------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------------------------------------------+------+-----+---------+-------+
| idStatus | int(11) | NO | PRI | NULL | |
| nameStatus | enum('underConsideration','approved','rejected') | YES | | NULL | |
+------------+--------------------------------------------------+------+-----+---------+-------+
사용 중인 룸:
+--------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+----------------+
| idOccupation | int(11) | NO | PRI | NULL | auto_increment |
| idRoom | int(11) | NO | | NULL | |
| idRequest | int(11) | NO | | NULL | |
+--------------+---------+------+-----+---------+----------------+
동일한 ID의 요청을 사용자가 사용한 방 테이블에 삽입하면 BookingRequest에서 상태가 1로 변경되는 트리거가 필요하여 이와 같은 것을 시도했습니다.
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;
효과가 없으니 어떤 제안이라도 해주시면 감사하겠습니다
시도해 보기:
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 ;
요구 사항에 따라 필요 없음BEGIN END
그리고.IF
쓸데없이SELECT
당신의 방아쇠에.이렇게 단순화할 수 있습니다.
CREATE TRIGGER occupy_trig AFTER INSERT ON occupiedroom
FOR EACH ROW
UPDATE BookingRequest
SET status = 1
WHERE idRequest = NEW.idRequest;
이제 where 문은 update 문에 속하지 않으므로 설정 후 세미콜론을 제거할 수 있습니다.또한.idRequest
문제가 될 수도 있어요, 글을 쓰는 게 낫죠.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 ;
언급URL : https://stackoverflow.com/questions/16892070/mysql-after-insert-trigger-which-updates-another-tables-column
'programing' 카테고리의 다른 글
operator.item getter() 및 sort()는 어떻게 작동합니까? (0) | 2023.09.27 |
---|---|
플로트 0에서 색상 값을 변환하는 중..1에서 바이트 0까지...255 (0) | 2023.09.27 |
SQL Server : 문자열에 숫자 문자만 있는지 테스트하는 방법 (0) | 2023.09.27 |
선행 문자에 대한 AngularJs UI type ahead match (0) | 2023.09.27 |
.apply jQuery 기능은 무엇입니까? (0) | 2023.09.27 |