sql >> データベース >  >> RDS >> Mysql

特定の条件下でINSERTを防止するMySQLトリガー

    例1、MySQL、signal sqlstateを使用して、トリガーへの挿入をキャンセルできます。

    1. varchar列を使用してテーブルを作成します:

      mysql> create table yar (val VARCHAR(25) not null);
      Query OK, 0 rows affected (0.02 sec)
      
    2. 「挿入前」トリガーを作成して、条件を確認し、許可しないようにします。

      mysql> delimiter $$
      mysql> create trigger foo before insert on yar
          -> for each row
          -> begin
          -> if new.val = '' then
          -> signal sqlstate '45000';
          -> end if;
          -> end;$$
      Query OK, 0 rows affected (0.01 sec)
      
    3. 条件が満たされた場所に挿入してみてください:

      mysql> delimiter ;
      
      mysql> insert into yar values("");
      ERROR 1644 (45000): Unhandled user-defined exception condition
      
      mysql> insert into yar values ("abc");
      Query OK, 1 row affected (0.01 sec)
      
      mysql> select * from yar;
      +-----+
      | val |
      +-----+
      | abc |
      +-----+
      1 row in set (0.00 sec)
      

    空白の文字列を挿入すると、トリガーはそれが空白であることを確認し、挿入を防ぐために信号を上げました。

    例2、MySQL、データをnull以外の制約に違反させることにより、トリガーへの挿入をキャンセルします。

    1. varchar列を使用してテーブルを作成します:

      mysql> create table yar (val VARCHAR(25) not null);
      Query OK, 0 rows affected (0.02 sec)
      
    2. 「挿入前」トリガーを作成して、条件を確認し、許可しないようにします。

      mysql> delimiter $$
      mysql> create trigger foo before insert on yar
          -> for each row
          -> begin
          -> if new.val = '' then
          -> set new.val = NULL;
          -> end if;
          -> end;$$
      Query OK, 0 rows affected (0.01 sec)
      
    3. 条件が満たされた場所に挿入してみてください:

      mysql> delimiter ;
      
      mysql> insert into yar values("");
      ERROR 1048 (23000): Column 'val' cannot be null
      
      mysql> insert into yar values ("abc");
      Query OK, 1 row affected (0.01 sec)
      
      mysql> select * from yar;
      +-----+
      | val |
      +-----+
      | abc |
      +-----+
      1 row in set (0.00 sec)
      

    空白の文字列を挿入しましたが、トリガーはそれが空白であることを確認し、値をnullに変更したため、挿入が禁止されています。



    1. Oracle JDBC:無効なユーザー名/パスワード(ora-01017)

    2. MySQL複数の値のように

    3. FOREIGN KEY制約によって参照されているため、オブジェクトを削除できませんでした-SQL Server/TSQLチュートリアルパート74

    4. Oracle SQL Developerを使用してデータをエクスポートする方法は?