2016-04-22 3 views
1

Also habe ich einen Tisch, der eine Liste von Küchen enthält und insgesamt wie viele Restaurants gibt es mit dieser Küche. (z. B. Italienisch | 7)Wie wird in SQL mit einem Trigger erhöht?

Ich versuche einen Trigger in phpMyAdmin einzurichten, der die Summe jedes Mal erhöht, wenn ein neues Restaurant zur Datenbank hinzugefügt wird. Hier ist, was ich bisher:

CREATE TRIGGER UpdateStats AFTER INSERT ON Restaurant 
BEGIN 
    UPDATE RestaurantStats SET TotalRestaurants = TotalRestaurants + 1 WHERE Cusine = NEW.cusine; 
END; 

Aber ich erhalte eine Fehlermeldung, und es sagt mir, dass es mit meiner Syntax zu tun hat. Wo gehe ich falsch? Ich folgte dem Beispiel, das ich sehr gut sah. Hier

ist die Fehlermeldung:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEGIN UPDATE RestaurantStats SET TotalRestaurants = TotalRestaurants + 1 WHERE' at line 2 
+0

Bitte teilen Sie die genaue Fehlermeldung. Auch was [tag: rdbms] verwendest du? – Mureinik

+0

Ich habe die Frage aktualisiert, um den Fehler anzuzeigen, und ich versuche, dies in phpMyAdmin zu tun. –

+0

Überprüfen Sie [SQL Fiddle-Demo] (http://sqlfiddle.com/#!9/722fe/1). – wchiquito

Antwort

1

tun Sie for each row

CREATE TRIGGER UpdateStats 
AFTER INSERT ON Restaurant 
FOR EACH ROW 
    UPDATE RestaurantStats SET TotalRestaurants = TotalRestaurants + 1 WHERE Cusine = NEW.cusine; 
0

Versuch mit "für jede Zeile" haben müssen:

CREATE TRIGGER UpdateStats AFTER INSERT ON Restaurant 
FOR EACH ROW 
BEGIN 
    UPDATE RestaurantStats SET TotalRestaurants = TotalRestaurants + 1 WHERE Cusine = NEW.cusine; 
END; 

Haben Sie nicht versucht es ich selbst so nicht sicher, ob es funktioniert ...

+0

Jetzt bekomme ich diesen Fehler: '# 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax in der Nähe von '' in Zeile 5 'entspricht –

+0

@FortunaIwasaki sieht aus wie es einige unnötige weiße Leerzeichen gibt ... Also in Zeile 5 ist 'END;'? – BloodWoork

+0

Nein, es ist die Aussage: 'UPDATE RestaurantStats SET TotalRestaurants = TotalRestaurants + 1 WHERE Cusine = NEW.Cusine;' Ich entfernte die Leerstelle aß, die starten, aber ich bekomme den gleichen Fehler. –

1

Sie müssen sich für jede Zeile verwenden und loszuwerden, die BEGIN ... END wie diese:

CREATE TRIGGER UpdateStats AFTER INSERT ON Restaurant 
FOR EACH ROW 
    UPDATE RestaurantStats SET TotalRestaurants = TotalRestaurants + 1 WHERE Cusine = NEW.cusine; 

BEGIN ... END wird nur für mehrere Abfragen in der gleichen Trigger verwendet und erfordert Neudefinition der Kündigung Charakter. Also dein erstes; beendet die Anweisung und lässt den BEGIN ohne END offen.

+0

Jetzt bekomme ich diesen Fehler: '# 1235 - Diese Version von MySQL unterstützt noch nicht 'mehrere Auslöser mit der gleichen Aktion Zeit und Ereignis für einen Tabelle '' –

+0

Das klingt, als ob Sie bereits einen anderen (oder denselben) Trigger für diese Tabelle und dieses Ereignis definiert haben. Führen Sie 'show triggers' aus, um zu sehen, was definiert ist, und lassen Sie es dann nach Namen fallen, wenn Sie bereits dort sind. Ich habe versucht, die Aussage in der Antwort und es funktioniert gut. – bitfiddler

+0

@FortunaIwasaki - hat das das Problem für dich gelöst? Wenn Sie mehrere Trigger für dieselbe Tabelle und dasselbe Ereignis benötigen, finden Sie hier einige gute Informationen und Beispiele: http://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html – bitfiddler