sql >> Database teknologi >  >> RDS >> Mysql

mysql oprette trigger syntaks fejl

Når du forsøger at rejse fejl via SIGNAL du skal angive SQLSTATE som er fejlkoden og for de brugerdefinerede generiske fejlkoder dens 45000 sammen med beskedteksten MESSAGE_TEXT

Så udløseren bliver som

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 ;

Testcase

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

Lad os oprette triggeren nu

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

Og efter at have kørt ovenstående 2 opdateringskommandoer her, hvordan ser tabellen ud

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

Bemærk, at 2. opdatering mislykkedes, og rækken er uændret.

Læs mere om denne https://dev.mysql.com/doc /refman/5.5/da/signal.html




  1. Gentagelig Læs isolationsniveau VÆLG vs. OPDATERING...HVOR

  2. Få flere rækker pr. gruppe ved at bruge groupBy i Eloquent

  3. Hent database eller enhver anden fil fra det interne lager ved hjælp af run-as

  4. Sådan benchmarker du MySQL &MariaDB's ydeevne ved hjælp af SysBench