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.