sql >> Database >  >> RDS >> Mysql

MySQL-trigger om INSERT onder bepaalde voorwaarden te voorkomen

Voorbeeld 1, MySQL, je kunt die insert in de trigger annuleren met signal sqlstate

  1. Maak uw tabel met een varchar-kolom:

    mysql> create table yar (val VARCHAR(25) not null);
    Query OK, 0 rows affected (0.02 sec)
    
  2. Maak uw 'voor invoegen'-trigger om te controleren op een voorwaarde en niet toe te staan.

    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. Probeer in te voegen waar aan de voorwaarde is voldaan:

    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)
    

Je hebt een blanco string ingevoegd, de trigger zag dat deze blanco was en verhoogde het signaal om het invoegen te voorkomen.

Voorbeeld 2, MySQL, annuleer de invoeging in de trigger door ervoor te zorgen dat de gegevens een niet-null-beperking schenden.

  1. Maak uw tabel met een varchar-kolom:

    mysql> create table yar (val VARCHAR(25) not null);
    Query OK, 0 rows affected (0.02 sec)
    
  2. Maak uw 'voor invoegen'-trigger om te controleren op een voorwaarde en niet toe te staan.

    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. Probeer in te voegen waar aan de voorwaarde is voldaan:

    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)
    

Je hebt een lege string ingevoegd, de trigger zag dat deze leeg was en veranderde de waarde in null, dus het invoegen wordt voorkomen.



  1. MySQL TABLE-instructie

  2. MySQL - Herstel gedropte prestatieschemadatabase

  3. EM12c Database Wachttijd waarschuwingen

  4. Hoe te converteren van de ene datumnotatie naar de andere in SQL Server met CONVERT()