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

mysql utwórz błąd składni wyzwalacza

Gdy próbujesz zgłosić błędy za pomocą SIGNAL musisz określić SQLSTATE który jest kodem błędu, a dla ogólnych kodów błędów zdefiniowanych przez użytkownika jest to 45000 wraz z tekstem wiadomości MESSAGE_TEXT

Tak więc wyzwalacz staje się

delimiter //
create trigger lock_x_id before update on games
for each row
begin
 if old.xid is not null then
   signal SQLSTATE VALUE '45000' SET MESSAGE_TEXT = 'Your custom error message';
 end if;
end;//
delimiter ;

Przypadek testowy

mysql> select * from games;
+----+------+------+
| id | xid  | val  |
+----+------+------+
|  1 | NULL |    1 |
|  2 | NULL |    2 |
|  3 | NULL |    3 |
|  4 |    1 |    4 |
|  5 |    2 |    5 |
+----+------+------+

Stwórzmy teraz wyzwalacz

mysql> delimiter //
mysql> create trigger lock_x_id before update on games
    -> for each row
    -> begin
    ->  if old.xid is not null then
    ->    signal SQLSTATE VALUE '45000' SET MESSAGE_TEXT = 'Your custom error message';
    ->  end if;
    -> end;//
Query OK, 0 rows affected (0.05 sec)


mysql> update games set xid = 4 where id = 1;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update games set xid = 5 where id=5;
ERROR 1644 (45000): Your custom error message

A po uruchomieniu powyższych 2 poleceń aktualizacji tutaj, jak wygląda tabela

mysql> select * from games;
+----+------+------+
| id | xid  | val  |
+----+------+------+
|  1 |    4 |    1 |
|  2 | NULL |    2 |
|  3 | NULL |    3 |
|  4 |    1 |    4 |
|  5 |    2 |    5 |
+----+------+------+

Zwróć uwagę, że druga aktualizacja nie powiodła się, a wiersz pozostaje niezmieniony.

Przeczytaj więcej o tym https://dev.mysql.com/doc /refman/5.5/pl/sygnał.html




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak korzystać z puli połączeń z java, MySQL i Tomcat 6?

  2. JPA + Hibernate:Jak zdefiniować ograniczenie mające ON DELETE CASCADE

  3. MySql na temat kasowania koncepcji kaskadowej?

  4. Struktura bazy danych Drupala — wydajna/nieefektywna?

  5. Datepicker jQuery z php i mysql