programing

mysql에서 트리거를 작성하려고 할 때 구문 오류

skycolor 2023. 10. 29. 19:08
반응형

mysql에서 트리거를 작성하려고 할 때 구문 오류

감사 로그에 대한 트리거를 생성하려고 합니다. 에 삽입한 후manageMemberLog그리고.action열이 다음과 같습니다.CREATE, 그런 다음 관련 열을 삽입합니다.users테이블을 선택한 다음 새로 만든 행을 잡고 사용자를 잡습니다.아이디를 입력하고 나머지 데이터를 프로필에 넣었는데, 쿼리를 제출하려다 msg라는 오류가 발생합니다.

#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 'END' at line 9

9호선 = END IF;

제가 작성한 내용을 신중하게 다시 입력해보았지만 같은 오류 msg입니다.

업데이트: 포맷을 사용했는데 다음과 같이 표시됩니다.WHERE userID = @newUserID오류입니다. select에서 데이터를 가져와 @newUser로 값을 설정하면 여전히 이해할 수 없습니다.신분증.

DELIMITER $$
CREATE TRIGGER usersDB_ai AFTER INSERT
ON manageMemberLog 
FOR EACH ROW 
    IF NEW.action = 'CREATE' THEN
        INSERT INTO users (firstName, lastName, userName, email, pwd) VALUES (NEW.firstName, NEW.lastName, NEW.userName, NEW.email, NEW.pwd);
        SET @newUserID := (SELECT userID FROM users WHERE userName = NEW.userName AND email = NEW.email); 
        UPDATE profiles SET rankID = NEW.rankID WHERE userID = @newUserID;
    END IF;
END$$
DELIMITER ;

관련 표:

CREATE TABLE `users` (
  `userID` int(11) NOT NULL,
  `firstName` varchar(128) NOT NULL,
  `lastName` varchar(128) NOT NULL,
  `userName` varchar(128) NOT NULL,
  `email` varchar(128) NOT NULL,
  `pwd` varchar(128) NOT NULL
) 

DELIMITER $$
CREATE TRIGGER `userCreated` AFTER INSERT ON `users` FOR EACH ROW BEGIN 
INSERT INTO profiles (userID) VALUES(NEW.userID);
END
$$
DELIMITER ;


CREATE TABLE `profiles` (
  `profileID` int(11) NOT NULL,
  `userID` int(11) NOT NULL,
  `rankID` int(11) NOT NULL,
   ...
)

CREATE TABLE `manageMemberLog` (
  `manageMemberLogID` int(11) NOT NULL,
  `manageDate` datetime NOT NULL,
  `managerID` int(11) DEFAULT NULL,
  `action` varchar(6) CHARACTER SET utf8mb4 NOT NULL,
  `userID` int(11) DEFAULT NULL,
  `firstName` varchar(128) CHARACTER SET utf8mb4 NOT NULL,
  `lastName` varchar(128) CHARACTER SET utf8mb4 NOT NULL,
  `userName` varchar(128) CHARACTER SET utf8mb4 NOT NULL,
  `email` varchar(128) CHARACTER SET utf8mb4 NOT NULL,
  `pwd` varchar(128) CHARACTER SET utf8mb4 NOT NULL,
  `rankID` int(11) NOT NULL
)

누가 미리 감사를 도와줄 수 있습니까!

Silly Me, 그래서 잘못된 것은 제가 각 행 뒤에 "Begin"이라고 쓰는 것을 잊어버렸고 그것이 말하는 오류를 포함하지 않는다는 것입니다.오류 메시지는 신뢰할 수 없을 때가 있습니다. 하지만 제 생각에 도움이 된 것 같습니다.END. 더 좋은 에러 메세지는you can't end when it never began.

따라서 올바른 쿼리는 다음과 같습니다.

DELIMITER $$
CREATE TRIGGER usersDB_ai AFTER INSERT
ON manageMemberLog 
FOR EACH ROW BEGIN
    IF NEW.action = 'CREATE' THEN
        INSERT INTO users (firstName, lastName, userName, email, pwd) VALUES (NEW.firstName, NEW.lastName, NEW.userName, NEW.email, NEW.pwd);
        SET @newUserID := (SELECT userID FROM users WHERE userName = NEW.userName AND email = NEW.email); 
        UPDATE profiles SET rankID = NEW.rankID WHERE userID = @newUserID;
    END IF;
END$$
DELIMITER ;

언급URL : https://stackoverflow.com/questions/65983332/syntax-error-when-i-try-to-create-trigger-in-mysql

반응형