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
'programing' 카테고리의 다른 글
각 ID의 마지막 레코드 가져오기 (0) | 2023.10.29 |
---|---|
__attribute__가 선언의 모든 변수에 적용됩니까? (0) | 2023.10.29 |
튜플 정의에서 후행 쉼표를 사용하는 구문 규칙은 무엇입니까? (0) | 2023.10.29 |
moment.js는 올바른 함수가 제대로 작동하지 않습니다. (0) | 2023.10.29 |
MariaDB 10.1 도커 충돌 InnoDB (0) | 2023.10.24 |