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

Lempar kesalahan yang mencegah pembaruan tabel di pemicu MySQL

Mulai MySQL 5.5, Anda dapat menggunakan SIGNAL sintaks untuk melempar pengecualian :

signal sqlstate '45000' set message_text = 'My Error Message';

Status 45000 adalah status umum yang mewakili "pengecualian yang ditentukan pengguna yang tidak ditangani".

Berikut adalah contoh pendekatan yang lebih lengkap:

delimiter //
use test//
create table trigger_test
(
    id int not null
)//
drop trigger if exists trg_trigger_test_ins //
create trigger trg_trigger_test_ins before insert on trigger_test
for each row
begin
    declare msg varchar(128);
    if new.id < 0 then
        set msg = concat('MyTriggerError: Trying to insert a negative value in trigger_test: ', cast(new.id as char));
        signal sqlstate '45000' set message_text = msg;
    end if;
end
//

delimiter ;
-- run the following as seperate statements:
insert into trigger_test values (1), (-1), (2); -- everything fails as one row is bad
select * from trigger_test;
insert into trigger_test values (1); -- succeeds as expected
insert into trigger_test values (-1); -- fails as expected
select * from trigger_test;


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

  2. Bagaimana Mengonversi UTC ke Waktu Lokal di MySQL

  3. Jenis kesalahan sintaks tidak valid =MyISAM dalam DDL dihasilkan oleh Hibernate

  4. Bagaimana cara mendapatkan jumlah hari perbedaan antara dua tanggal di MySQL?

  5. Pemecahan masalah login PHP SQL sederhana