2016-05-22 11 views
-1

トリガーを作成しようとしていますが、どこかにエラーがあり、正しい記述方法がわかりません。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;// 
+1

エラーは、あなたがUPDATE'文の 'の後、返信用 –

+0

おかげで、テーブル名を指定する必要があることを示しますが、コードの中で、まだ同じエラーを持っています。 ( 'numberOfFailedAttempts'> 3)THEN UPDATE SET OLD.'lockedAccount' = 1、LIMIT 1 IF をBEGIN EACH ROW FOR Authorization.numberOfFailedAttempts ON更新後トリガTRIGGER1を作成します。 END; – pawel112

+0

あなたは間違った場所にテーブル名を設定しています。これを試してみてください: 'UPDATE Authorization SET lockedAccount = 1 WHERE 1、LIMIT 1;' –

答えて

0

それはあなたのために働くことを願っています。

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 ; 
-1
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; 
+0

ご返信ありがとうございますが、私は5行目でエラーが発生しました。 – pawel112

関連する問題