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

mysql削除トリガー

    FOR EACH ROWとの混同が原因だと思います ステートメント。
    これは、「トリガーが呼び出される前に発行されたステートメントの一致したレコード」のみです。 "

    Nが存在する場合 テーブル内のレコードの数であり、where id=xのレコードと一致します 、
    xを想定 N未満の結果になります レコード、たとえばN-5 、次に
    FOR EACH ROW N-5のループが発生します 時間のみ。

    更新
    FOR EACH ROWが原因で影響を受けた行で実行されたサンプルテスト ステートメントを以下に示します。

    mysql> -- create a test table
    mysql> drop table if exists tbl; create table tbl ( i int, v varchar(10) );
    Query OK, 0 rows affected (0.01 sec)
    
    Query OK, 0 rows affected (0.06 sec)
    
    mysql> -- set test data
    mysql> insert into tbl values(1,'one'),(2,'two' ),(3,'three'),(10,'ten'),(11,'eleven');
    Query OK, 5 rows affected (0.02 sec)
    Records: 5  Duplicates: 0  Warnings: 0
    
    mysql> select * from tbl;
    +------+--------+
    | i    | v      |
    +------+--------+
    |    1 | one    |
    |    2 | two    |
    |    3 | three  |
    |   10 | ten    |
    |   11 | eleven |
    +------+--------+
    5 rows in set (0.02 sec)
    
    mysql> select count(*) row_count from tbl;
    +-----------+
    | row_count |
    +-----------+
    |         5 |
    +-----------+
    1 row in set (0.00 sec)
    
    mysql>
    mysql> -- record loop count of trigger in a table
    mysql> drop table if exists rows_affected; create table rows_affected( i int );
    Query OK, 0 rows affected (0.02 sec)
    
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> select count(*) 'rows_affected' from rows_affected;
    +---------------+
    | rows_affected |
    +---------------+
    |             0 |
    +---------------+
    1 row in set (0.00 sec)
    
    mysql>
    mysql> set @cnt=0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>
    mysql> -- drop trigger if exists trig_bef_del_on_tbl;
    mysql> delimiter //
    mysql> create trigger trig_bef_del_on_tbl before delete on tbl
        ->   for each row begin
        ->     set @cnt = if(@cnt is null, 1, (@cnt+1));
        ->
        ->     /* for cross checking save loop count */
        ->     insert into rows_affected values ( @cnt );
        ->   end;
        -> //
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>
    mysql> delimiter ;
    mysql>
    mysql> -- now let us test the delete operation
    mysql> delete from tbl where i like '%1%';
    Query OK, 3 rows affected (0.02 sec)
    
    mysql>
    mysql> -- now let us see what the loop count was
    mysql> select @cnt as 'cnt';
    +------+
    | cnt  |
    +------+
    | 3    |
    +------+
    1 row in set (0.00 sec)
    
    mysql>
    mysql> -- now let us see the table data
    mysql> select * from tbl;
    +------+-------+
    | i    | v     |
    +------+-------+
    |    2 | two   |
    |    3 | three |
    +------+-------+
    2 rows in set (0.00 sec)
    
    mysql> select count(*) row_count from tbl;
    +-----------+
    | row_count |
    +-----------+
    |         2 |
    +-----------+
    1 row in set (0.00 sec)
    
    mysql> select count(*) 'rows_affected' from rows_affected;
    +---------------+
    | rows_affected |
    +---------------+
    |             3 |
    +---------------+
    1 row in set (0.00 sec)
    
    mysql>
    



    1. MySQLおよびMariaDB移行用のトップオープンソースツール

    2. Spring DATA JPAを使用してカスタムクエリを作成しますか?

    3. MySQLテーブルの変更を(MySQL 4を使用して)どのように監査する必要がありますか?

    4. treeviewtkinterからアイテムをコピーする