Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL Trigger untuk mencegah INSERT dalam kondisi tertentu

Contoh 1, MySQL, Anda dapat membatalkan penyisipan itu di pemicu dengan signal sqlstate

  1. Buat tabel Anda dengan kolom varchar:

    mysql> create table yar (val VARCHAR(25) not null);
    Query OK, 0 rows affected (0.02 sec)
    
  2. Buat pemicu 'sebelum memasukkan' Anda untuk memeriksa kondisi dan melarangnya.

    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. Coba masukkan di mana kondisi terpenuhi:

    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)
    

Anda memasukkan string kosong, pelatuk melihatnya kosong dan menaikkan sinyal untuk mencegah penyisipan.

Contoh 2, MySQL, Batalkan penyisipan di pemicu dengan menyebabkan data melanggar batasan bukan nol.

  1. Buat tabel Anda dengan kolom varchar:

    mysql> create table yar (val VARCHAR(25) not null);
    Query OK, 0 rows affected (0.02 sec)
    
  2. Buat pemicu 'sebelum memasukkan' Anda untuk memeriksa kondisi dan melarangnya.

    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. Coba masukkan di mana kondisi terpenuhi:

    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)
    

Anda memasukkan string kosong, pemicu melihatnya kosong dan mengubah nilainya menjadi nol, sehingga penyisipan dicegah.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah Anda membagi/meledak bidang dalam kueri MySQL?

  2. Grup MySQL Berdasarkan dan Pesan Berdasarkan

  3. MySQL match() against() - urutkan berdasarkan relevansi dan kolom?

  4. Bagaimana cara menginstal MySQL di CentOS 7

  5. MySQL 8 Ekspresi Tabel Umum CTE