반응형
트리거 if-delete-clause를 생성할 수 없습니다.
여기 제가 가지고 있는 코드가 있습니다.
CREATE TRIGGER free_tokens AFTER INSERT ON `csrf_token`
IF (SELECT COUNT(`csrf_token`.`id`)) > 5000 THEN
DELETE FROM `csrf_token` WHERE `csrf_token`.`time` < (UNIX_TIMESTAMP(NOW() - INTERVAL 2 HOUR))
END IF;
삽입 후 5000개 이상의 항목이 있는지 확인한 다음 2시간이 지난 모든 항목을 삭제합니다.
나는 받는 중입니다.you have an error in your mysql syntax near IF (SELECT ... DELETE FROM ...
제가 MariaDB를 사용하고 있는데, 이 간단한 설명의 오류가 어디에 있는지 누가 이해를 도와주실 수 있나요?
트리거 정의에 누락된 작은 부분이 있습니다.
- 트리거 명령을 대신 세미콜론으로 구분할 수 있도록 MariaDB 구분 기호 유형을 '//'로 변경합니다.
FOR EACH ROW
MariaDB 트리거 구문의 일부로- 당신의.
DELETE
문 끝에 세미콜론이 없습니다. - IF-THEN-ELSE 문 내부에 쿼리를 중첩할 수 없습니다.
END
MariaDB 구문의 일부로 정의 후 트리거의 끝을 구분합니다.
의 중첩된 쿼리에 대한 해결 방법IF
문장은 다음의 결과로 업데이트될 변수를 정의할 수 있습니다.SELECT
회의 전에 수행될 예정입니다.IF
진술.
DELIMITER //
CREATE OR REPLACE TRIGGER free_tokens
AFTER INSERT
ON `csrf_token`
FOR EACH ROW
BEGIN
DECLARE num_rows INT;
SELECT
COUNT(*) INTO num_rows
FROM
`csrf_token`;
IF num_rows > 5000 THEN
DELETE FROM
`csrf_token`
WHERE
`csrf_token`.`time` < (UNIX_TIMESTAMP(NOW() - INTERVAL 2 HOUR));
END IF;
END//
DELIMITER ;
MariaDB 트리거 구문에 대한 자세한 내용은 여기를 참조하십시오.
언급URL : https://stackoverflow.com/questions/71832821/cannot-create-trigger-if-delete-clause
반응형
'source' 카테고리의 다른 글
제한을 사용하여 dsl 삭제 쿼리를 쿼리했습니다. (0) | 2023.06.06 |
---|---|
R에서 트라이캐치를 쓰는 방법 (0) | 2023.06.06 |
표에 댓글을 달려면 어떻게 해야 하나요 - 마리아DB (0) | 2023.06.06 |
오류 1366: 마리아에 문자열을 삽입할 때 잘못된 문자열 값DB (0) | 2023.06.06 |
python 내에서 bash 스크립트 실행 중 (0) | 2023.06.01 |