Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Trigger, um INSERT unter bestimmten Bedingungen zu verhindern

Beispiel 1, MySQL, Sie können diese Einfügung in den Trigger mit signal sqlstate abbrechen

  1. Erstellen Sie Ihre Tabelle mit einer varchar-Spalte:

    mysql> create table yar (val VARCHAR(25) not null);
    Query OK, 0 rows affected (0.02 sec)
    
  2. Erstellen Sie Ihren „Before Insert“-Trigger, um auf eine Bedingung zu prüfen und dies abzulehnen.

    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. Versuchen Sie einzufügen, wo die Bedingung erfüllt ist:

    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)
    

Sie haben eine leere Zeichenfolge eingefügt, der Trigger hat erkannt, dass sie leer ist, und das Signal ausgelöst, um die Einfügung zu verhindern.

Beispiel 2, MySQL, Brechen Sie die Einfügung in den Trigger ab, indem Sie dafür sorgen, dass die Daten eine Nicht-Null-Einschränkung verletzen.

  1. Erstellen Sie Ihre Tabelle mit einer varchar-Spalte:

    mysql> create table yar (val VARCHAR(25) not null);
    Query OK, 0 rows affected (0.02 sec)
    
  2. Erstellen Sie Ihren „Before Insert“-Trigger, um auf eine Bedingung zu prüfen und dies abzulehnen.

    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. Versuchen Sie einzufügen, wo die Bedingung erfüllt ist:

    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)
    

Sie haben eine leere Zeichenfolge eingefügt, der Trigger hat erkannt, dass sie leer ist, und den Wert auf null geändert, sodass die Einfügung verhindert wird.