Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyzwalacz MySQL zapobiegający INSERT pod pewnymi warunkami

Przykład 1, MySQL, możesz anulować wstawienie w wyzwalaczu za pomocą signal sqlstate

  1. Utwórz tabelę z kolumną varchar:

    mysql> create table yar (val VARCHAR(25) not null);
    Query OK, 0 rows affected (0.02 sec)
    
  2. Utwórz wyzwalacz „przed wstawieniem”, aby sprawdzić warunek i odrzucić.

    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. Spróbuj wstawić tam, gdzie warunek jest spełniony:

    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)
    

Wstawiłeś pusty ciąg, spust zobaczył, że jest pusty i podniósł sygnał, aby zapobiec wstawieniu.

Przykład 2, MySQL, Anuluj wstawianie w wyzwalaczu, powodując, że dane naruszają ograniczenie niezerowe.

  1. Utwórz tabelę z kolumną varchar:

    mysql> create table yar (val VARCHAR(25) not null);
    Query OK, 0 rows affected (0.02 sec)
    
  2. Utwórz wyzwalacz „przed wstawieniem”, aby sprawdzić warunek i odrzucić.

    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. Spróbuj wstawić tam, gdzie warunek jest spełniony:

    Ogranicznik
    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)
    

Wstawiłeś pusty ciąg, wyzwalacz zobaczył, że był pusty i zmienił wartość na null, więc wstawienie jest niemożliwe.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. phpMyAdmin na MySQL 8.0

  2. Jak podłączyć PHP do MySQL

  3. Kod błędu:1215. Nie można dodać ograniczenia klucza obcego (klucze obce)

  4. Czy można zrobić klucz obcy MySQL w jednej z dwóch możliwych tabel?

  5. SQLite - ORDER BY RAND()