programing

이전 데이터와 새 데이터를 기반으로 조건을 사용하여 업데이트 시 트리거를 생성하는 방법은 무엇입니까?

newsource 2023. 8. 8. 21:40

이전 데이터와 새 데이터를 기반으로 조건을 사용하여 업데이트 시 트리거를 생성하는 방법은 무엇입니까?

필드를 업데이트합니다.server_prev_level_xp언제NEW.server_xp > OLD.server_prev_level_xp

저는 MariaDb와 의 문서를 사용합니다.

저는 이것을 시도하지만 작동하지 않습니다:

CREATE TRIGGER Level_Update
AFTER UPDATE OF server_xp ON servers
FOR EACH ROW
WHEN (NEW.server_xp > OLD.server_prev_level_xp)
BEGIN
    SET NEW.server_prev_level_xp = OLD.server_prev_level_xp + OLD.server_prev_level_xp >> 1;
    SET NEW.server_level = OLD.server_level + 1;
END;

4행에 오류가 있습니다.

WHEN (NEW.server_xp > OLD.server_prev_level_xp)

내가 뭘 잘못하고 있는 거지?

트리거를 만드는 데 사용된 구문이 MariaBD에 적용되지 않습니다([OF <trigger Column list>]그리고.FOR EACH ROW [WHEN (search condition)]). CREATE 트리거를 참조하십시오.

한 가지 옵션은 IF 문을 사용하는 것입니다.

기억: Such a SET statement has no effect in an AFTER trigger because the row change will have already occurred..

DELIMITER //

CREATE TRIGGER `Level_Update` /*AFTER*/ BEFORE UPDATE ON `servers`
FOR EACH ROW
BEGIN
  IF NEW.`server_xp` > OLD.`server_prev_level_xp` THEN
  .
  .
  .
  END IF;
END//

DELIMITER ;

사용:

DELIMITER //

CREATE TRIGGER `Level_Update` BEFORE UPDATE ON shp_servers
FOR EACH ROW
BEGIN
    IF NEW.`server_xp` > OLD.`server_level_xp` THEN
        SET NEW.`server_level_xp` = OLD.`server_level_xp` + OLD.`server_level_xp` >> 1;
    END IF;
END//

DELIMITER ;

보유:

1419 - SUPER 권한이 없으며 이진 로그를 사용할 수 있습니다(안전하지 않은 log_bin_trust_function_creators 변수를 사용할 수 있습니다).

시도:

CREATE TRIGGER `Level_Update` BEFORE UPDATE ON shp_servers
    FOR EACH ROW
    BEGIN
        IF NEW.`server_xp` > OLD.`server_level_xp` THEN
            SET NEW.`server_level_xp` = OLD.`server_level_xp` + OLD.`server_level_xp` >> 1;
        END IF;
    END

보유:

1064 - SQL 구문에 오류가 있습니다(5행).

언급URL : https://stackoverflow.com/questions/37577439/how-to-create-trigger-on-update-with-condition-based-on-old-and-new-data