【问题标题】:Mysql create a triggerMysql 创建触发器
【发布时间】:2016-09-19 11:15:16
【问题描述】:

我正在尝试创建触发器,但某处出现错误,我不知道如何正确编写。

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 AFTER ON UPDATE ON Authorization.numberOfFailedAttempts FOR EACH BEGIN IF (numberOfFailedAttempts > 3) THEN UPDATE SET OLD.lockedAccount = 1 WHERE 1, LIMIT 1;结束;
  • 你在错误的地方设置了表名,试试这个:UPDATE Authorization SET lockedAccount = 1 WHERE 1, LIMIT 1;
  • 感谢您的回复,但我在第 5 行有一个错误。CREATE TRIGGER trigger1 AFTER ON UPDATE ON numberOfFailedAttempts FOR EACH BEGIN IF (numberOfFailedAttempts > 3) THEN UPDATE Authorization SET lockedAccount = 1 WHERE 1,限制 1;结束;
  • 检查我的答案。也许它会解决你的问题。

标签: mysql sql triggers


【解决方案1】:
DELIMITER //
   
    CREATE TRIGGER trigger_name AFTER UPDATE ON Authorization
    FOR EACH ROW
    BEGIN
        IF (numberOfFailedAttempts > 3) THEN
           UPDATE Authorization SET lockedAccount = 1 WHERE 1 LIMIT 1;
        END IF;
    END //

DELIMITER ;

【讨论】:

    【解决方案2】:
     CREATE TRIGGER trigger1 AFTER UPDATE ON `numberOfFailedAttempts`
     FOR EACH ROW
     BEGIN
     IF (`numberOfFailedAttempts` > 3) THEN
     UPDATE Authorization SET `lockedAccount` = 1 WHERE 1, LIMIT 1;
     END;
    

    【讨论】:

    • 感谢您的回复,但我在第 5 行有错误。
    猜你喜欢
    • 2011-02-03
    • 2015-02-23
    • 2015-03-01
    • 2013-07-16
    • 2013-05-30
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    相关资源
    最近更新 更多