1

私はmysqlテーブルに削除前トリガーを書き込もうとしています。これが私が正確に行おうとしていることです。常にテーブルにある特定のレコードが必要なので、たとえば、レコードが削除または更新されると、トリガーは最初のレコードを再挿入するだけです。

EXAMPLE
Tablename: Users
Table Columns(3):ID,Username,Password
and I am trying to keep the following record from being deleted(Initial Record)
Username=Dames, Password=Password

ただし、トリガーは初めてで、1つか3つ試していますが、本当に助けが必要なようです。質問を明確にしたいと思います。ありがとうございました。

4

1 に答える 1

3
  1. 保存したいレコードの詳細をトリガーにハードコーディングすることに満足している場合は、次のようにすることができます。

    DELIMITER ;;
    
    CREATE TRIGGER foo_upd BEFORE UPDATE ON Users FOR EACH ROW
    IF OLD.Username <=> 'Dames' AND OLD.Password <=> 'Password' THEN
      INSERT INTO Users (Username, Password) VALUES ('Dames', 'Password');
    END IF ;;
    
    CREATE TRIGGER foo_del BEFORE DELETE ON Users FOR EACH ROW
    IF OLD.Username <=> 'Dames' AND OLD.Password <=> 'Password' THEN
      INSERT INTO Users (Username, Password) VALUES ('Dames', 'Password');
    END IF ;;
    
    DELIMITER ;
    
  2. それ以外の場合は、テーブルにブール列を追加することをお勧めしUsersます。例locked

    ALTER TABLE Users ADD COLUMN locked BOOLEAN NOT NULL DEFAULT FALSE;
    

    次に、その列の値をTRUE、保持するレコードに設定します。

    UPDATE Users SET locked = TRUE
    WHERE  Username = 'Dames' AND Password = 'Password';
    

    次に、次の行に沿ってトリガーを作成します。

    DELIMITER ;;
    
    CREATE TRIGGER foo_upd BEFORE UPDATE ON Users FOR EACH ROW
    IF OLD.locked THEN
      INSERT INTO Users (Username, Password) VALUES (OLD.Username, OLD.Password);
    END IF ;;
    
    CREATE TRIGGER foo_del BEFORE DELETE ON Users FOR EACH ROW
    IF OLD.locked THEN
      INSERT INTO Users (Username, Password) VALUES (OLD.Username, OLD.Password);
    END IF ;;
    
    DELIMITER ;
    
于 2012-08-26T18:08:14.940 に答える