Att skapa en trigger i MySQL

  • Författare
  • Meddelande
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11199
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Att skapa en trigger i MySQL

Inlägg08 feb 2012, 09:56

Detta beskrivs i manualen: http://dev.mysql.com/doc/refman/5.5/en/ ... igger.html

Här följer ett exempelprogram som skapar en trigger som körs när det görs insert på en tabell, triggern gör då insert på en annan tabell. Ett vanligt beteende för en trigger.

Kod: Markera allt
drop table a;
drop table b;
drop trigger c;

create table a (a int);
create table b (b int);

delimiter //

create trigger c after insert on a
for each row
begin
  insert b set b=NEW.a+1;
end;
//

delimiter ;

delete from a;
insert into a values (1);

select * from a;
select * from b;


Om man kör koden i kommandointerfacet ser det ut så här:

Kod: Markera allt
Database changed
mysql> drop table a;
Query OK, 0 rows affected (0.00 sec)

mysql> drop table b;
Query OK, 0 rows affected (0.00 sec)

mysql> drop trigger c;
ERROR 1360 (HY000): Trigger does not exist
mysql>
mysql> create table a (a int);
Query OK, 0 rows affected (0.01 sec)

mysql> create table b (b int);
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql> delimiter //
mysql>
mysql> create trigger c after insert on a
    -> for each row
    -> begin
    ->   insert b set b=NEW.a+1;
    -> end;
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> delimiter ;
mysql>
mysql> delete from a;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into a values (1);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> select * from a;
+------+
| a    |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> select * from b;
+------+
| b    |
+------+
|    2 |
+------+
1 row in set (0.00 sec)

mysql>


Samma kod funkar i MySQL Workbench. Om man kör koden i ett PHP-skript kan man ta bort DELIMITER, den behövs inte då. Det går bra att bara använda semikolon som avgränsare.

Om du får problem med "nya" konstruktioner, gör då alltid ett enklare testprogram och kör det via olika klienter mot databasen. Det hjälper din felsökning. Ibland är det svårt att se om problemet är PHP, SQL eller databasservern. Då måste man bryta ned problemet i små delar och testa dem var för sig.
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 9 gäster