Exemple 1, MySQL, vous pouvez annuler cette insertion dans le déclencheur avec signal sqlstate
-
Créez votre tableau avec une colonne varchar :
mysql> create table yar (val VARCHAR(25) not null); Query OK, 0 rows affected (0.02 sec)
-
Créez votre déclencheur "avant insertion" pour vérifier une condition et l'interdire.
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)
-
Essayez d'insérer où la condition est remplie :
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)
Vous avez inséré une chaîne vide, la gâchette a vu qu'elle était vide et a déclenché le signal pour empêcher l'insertion.
Exemple 2, MySQL, Annuler l'insertion dans le déclencheur en faisant en sorte que les données violent une contrainte non nulle.
-
Créez votre tableau avec une colonne varchar :
mysql> create table yar (val VARCHAR(25) not null); Query OK, 0 rows affected (0.02 sec)
-
Créez votre déclencheur "avant insertion" pour vérifier une condition et l'interdire.
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)
-
Essayez d'insérer où la condition est remplie :
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)
Vous avez inséré une chaîne vide, le déclencheur a vu qu'elle était vide et a changé la valeur en null, donc l'insertion est empêchée.