programing

MariaDB에서 트랜잭션을 만들어 IP 블랙리스트의 만료 시간을 설정합니다.

topblog 2023. 7. 22. 09:08
반응형

MariaDB에서 트랜잭션을 만들어 IP 블랙리스트의 만료 시간을 설정합니다.

이 거래를 구축하는 데 사용한 질문은 다음과 같습니다.
mysql의 current_timestamp에 기본값인 1시간을 추가하는 방법은 무엇입니까?

데이터베이스에 트랜잭션을 만들어 다음을 채우려고 합니다.allowed내 mariadb 데이터베이스 테이블의 열blacklisted_ips나는 그것을 원합니다.allowed내 칼럼에서 한 시간 후에.added기본값이 다음인 열CURRENT_TIMESTAMP지금까지 거래한 내용은 다음과 같습니다.

CREATE TRIGGER before_insert_on_blacklisted_ips BEFORE INSERT ON blacklisted_ips FOR EACH ROW BEGIN
SET NEW.allowed=NOW()+INTERVAL 1 HOUR;
END;

다음과 같은 오류 메시지가 표시됩니다.

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 2

다음은 내 테이블 스키마입니다.

CREATE TABLE blacklisted_ips (
    ip_id int(11) NOT NULL AUTO_INCREMENT,
    ip_add varchar(15) NOT NULL,
    added timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    allowed timestamp NOT NULL,
    PRIMARY KEY (ip_id)
);

MySQL에는 다음 항목 사이에 모호성이 있습니다.;그것이 a를 종료합니다.CREATE TRIGGER진술, 그리고 가능성.;트리거 본문에서 개별 문을 종료하는 문자입니다.

당신이 받은 오류는 혼란스럽습니다.

#1064 - SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서에서 2행의 " " 근처에서 사용할 구문을 확인하십시오.

일반적으로 구문 오류에는 구문 분석기가 혼동된 위치 뒤에 있는 문 텍스트가 포함됩니다.하지만 당신의 경우, 그것은 혼란스러웠습니다.;그것이 끝이라고 생각했습니다.CREATE TRIGGER진술.따라서 종료 시 오류가 발생합니다. 파서에 관한 한 오류 뒤에는 텍스트가 없습니다.

동일한 문제가 영향을 미칩니다.CREATE PROCEDURE그리고.CREATE FUNCTION.

모호성을 해결하기 위해 MySQL 클라이언트는 DELMITER를 변경하는 내장 명령을 지원하므로 루틴 본문에 나타나는 문자 시퀀스와는 다른 명령으로 변경할 수 있습니다.

DELIMITER ;;
CREATE TRIGGER before_insert_on_blacklisted_ips BEFORE INSERT ON blacklisted_ips 
FOR EACH ROW BEGIN
  SET NEW.allowed=NOW()+INTERVAL 1 HOUR;
END ;;

또는 트리거가 단일 문 트리거이기 때문에 다음이 필요하지 않습니다.BEGIN...END전혀 차단하지 않습니다.이렇게 하면 DELMITER 변경을 건너뛸 수 있습니다. 왜냐하면;그것이 당신의 것이 끝납니다.CREATE TRIGGER동일;트리거의 단일 문을 종료합니다.

CREATE TRIGGER before_insert_on_blacklisted_ips BEFORE INSERT ON blacklisted_ips 
FOR EACH ROW
  SET NEW.allowed=NOW()+INTERVAL 1 HOUR;

추신: 이 문서는 https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html 의 예를 통해 문서화되어 있습니다.

언급URL : https://stackoverflow.com/questions/51411748/create-transaction-on-mariadb-to-set-expiry-time-for-ip-blacklist

반응형