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

MySQLトリガーでテーブルの更新を妨げるエラーをスローします

    MySQL 5.5以降では、 SIGNAL 例外をスローする構文

    signal sqlstate '45000' set message_text = 'My Error Message';
    

    状態45000は、「未処理のユーザー定義の例外」を表す一般的な状態です。

    アプローチのより完全な例を次に示します。

    delimiter //
    use test//
    create table trigger_test
    (
        id int not null
    )//
    drop trigger if exists trg_trigger_test_ins //
    create trigger trg_trigger_test_ins before insert on trigger_test
    for each row
    begin
        declare msg varchar(128);
        if new.id < 0 then
            set msg = concat('MyTriggerError: Trying to insert a negative value in trigger_test: ', cast(new.id as char));
            signal sqlstate '45000' set message_text = msg;
        end if;
    end
    //
    
    delimiter ;
    -- run the following as seperate statements:
    insert into trigger_test values (1), (-1), (2); -- everything fails as one row is bad
    select * from trigger_test;
    insert into trigger_test values (1); -- succeeds as expected
    insert into trigger_test values (-1); -- fails as expected
    select * from trigger_test;
    


    1. MicrosoftAccessポッドキャストエピソード1を聞く

    2. T-SQLを使用してSQLServerエージェントXPを有効にする方法

    3. MS Access:長所と短所

    4. Postgresの配列列の各要素に関数を適用するにはどうすればよいですか?