我想創建一個觸發器,但在某處出現錯誤,我不知道如何編寫正確的。Mysql創建觸發器
CREATE TABLE IF NOT EXISTS Authorization(
userID INT PRIMARY KEY AUTO_INCREMENT,
login VARCHAR(50) NOT NULL,
password VARCHAR(64) NOT NULL,
numberOfFailedAttempts SMALLINT,
lastLogin TIMESTAMP,
lockedAccount BOOLEAN
);
INSERT INTO Authorization SELECT NULL, "test1", SHA2('pass1', 256), 1, NULL, FALSE;
INSERT INTO Authorization SELECT NULL, "test2", SHA2('pass2', 256), 1, NULL, FALSE;
INSERT INTO Authorization SELECT NULL, "test3", SHA2('pass3', 256), 1, NULL, FALSE;
INSERT INTO Authorization SELECT NULL, "test4", SHA2('pass4', 256), 1, NULL, FALSE;</code>
我想創建一個觸發器,當更新用戶檢查numberOfFailedAttempts
。如果numberOfFailedAttempts
> 3,則將lockedAccount
更改爲true。
CREATE TRIGGER trigger1 AFTER UPDATE ON `numberOfFailedAttempts`
FOR EACH ROW
BEGIN
IF (`numberOfFailedAttempts` > 3) THEN
UPDATE SET `lockedAccount` = 1 WHERE 1, LIMIT 1;
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 'SET `lockedAccount` = 1 WHERE 1, LIMIT 1' at line 5</code>
有人可以幫我嗎?
編輯:
在這段代碼中我有同樣的錯誤。
CREATE TRIGGER trigger1 AFTER UPDATE ON `numberOfFailedAttempts`
FOR EACH ROW
BEGIN
IF (`numberOfFailedAttempts` > 3) THEN
UPDATE `Authorization` SET `lockedAccount` = '1' WHERE `Authorization`.`userID` = OLD.`userID`;
END;
編輯:
我改變代碼和它的工作。
delimiter //
CREATE TRIGGER trigger1 BEFORE UPDATE ON Authorization
FOR EACH ROW
IF NEW.`numberOfFailedAttempts` > 3 THEN
SET NEW.`lockedAccount` = 1;
END IF;//
錯誤表明,你需要UPDATE'語句後'指定表名 –
感謝您的答覆,但在代碼中仍然有同樣的錯誤。 CREATE TRIGGER TRIGGER1 UPDATE ON Authorization.numberOfFailedAttempts FOR EACH ROW 之後開始 IF('numberOfFailedAttempts'> 3)THEN UPDATE SET OLD.'lockedAccount' = 1 WHERE 1,LIMIT 1; END; – pawel112
您在錯誤的地方設置了表名,試試這個:UPDATE授權SET lockedAccount = 1 WHERE 1,LIMIT 1;' –