2012-03-28 9 views
0

Ich habe eine Datenbank in MySQL. Hier ist SQL-Abfrage, um es zu erstellen http://paste.org.ru/?xzctqiWie erstellt man einen Trigger, der nach dem Einfügen der Zeile den Colum-Wert erhöht?

Hier ist Haupttabelle books. Alles, was ich tun muss, ist, wenn ich ein Buch hinzufüge, wähle ich Publisher-ID dafür. Nach dem Hinzufügen von Büchern muss ich alle Datensätze in dieser Tabelle durchlaufen und die Spalte publisher_books_amount für alle Zeilen erhöhen, die denselben Herausgeber wie in der aktuell hinzugefügten Zeile hat.

+----+-------+--------+------------------------+-----------+ 
| id | title | author | publisher_books_amount | publisher | 
+----+-------+--------+------------------------+-----------+ 
| 1 | Book1 |  1 |      0 |   1 | 
| 2 | Book2 |  2 |      0 |   1 | 
| 3 | Book3 |  1 |      0 |   2 | 
| 4 | Book4 |  3 |      0 |   3 | 
| 5 | Book1 |  3 |      0 |   1 | 
+----+-------+--------+------------------------+-----------+ 

Ich habe Trigger erstellt

DROP TRIGGER IF EXISTS `insert_trigger`; 
DELIMITER | 
CREATE TRIGGER `insert_trigger` AFTER INSERT ON books 
    FOR EACH ROW 
    BEGIN 
     UPDATE books SET publisher_books_amount = (publisher_books_amount + 1) 
     WHERE publisher = NEW.publisher; 
    END; 
    | 
DELIMITER ; 

Aber wenn ich hinzuzufügen bin versucht, MySQL bietet mir mit einem Fehler.

Tabelle kann nicht ‚Bücher‘ in gespeicherten Funktionen/Trigger aktualisieren, da es bereits von der Anweisung verwendet wird, die diese gespeicherte Funktion/Trigger aufgerufen.

Fragen Sie mich nicht, warum ich denormalized DB habe. Ich brauche nur die oben beschriebene Struktur.

BTW Ich muss die gleichen Trigger nach dem Löschen und Aktualisieren von Zeilen erstellen. Wenn es da Probleme gibt, könntest du mir auch dabei helfen?

Mit freundlichen Grüßen, Dmitriy.

Antwort

1

Update innerhalb einer Schleife ist nicht erlaubt, da es auf Endlosschleife geht. Probieren Sie Ihren triger ohne Update aus, mit nur gesetztem Wert this = this.

Verwandte Themen