トリガーを作成しようとしていますが、どこかにエラーがあり、正しい記述方法がわかりません。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'文の 'の後、返信用 –
おかげで、テーブル名を指定する必要があることを示しますが、コードの中で、まだ同じエラーを持っています。 ( 'numberOfFailedAttempts'> 3)THEN UPDATE SET OLD.'lockedAccount' = 1、LIMIT 1 IF をBEGIN EACH ROW FOR Authorization.numberOfFailedAttempts ON更新後トリガTRIGGER1を作成します。 END; – pawel112
あなたは間違った場所にテーブル名を設定しています。これを試してみてください: 'UPDATE Authorization SET lockedAccount = 1 WHERE 1、LIMIT 1;' –