이전 데이터와 새 데이터를 기반으로 조건을 사용하여 업데이트 시 트리거를 생성하는 방법은 무엇입니까?
필드를 업데이트합니다.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 트리거를 참조하십시오.
기억: 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
'programing' 카테고리의 다른 글
Python 구조의 메모리 내 크기 (0) | 2023.08.08 |
---|---|
ESLint 달러($)가 정의되지 않았습니다.(정의되지 않음) (0) | 2023.08.08 |
Cant start mariadb after switching Data Directory (0) | 2023.08.08 |
세그먼트에 숫자를 제한하는 가장 우아한 방법은 무엇입니까? (0) | 2023.08.08 |
Docker-Compose가 Docker Daemon에 연결할 수 없습니다. (0) | 2023.08.08 |