MySQL-Trigger für On-Insert-/Update-Ereignisse
Szenario:
Betrachten Sie zwei Tabellen, ext_words und ext_words_count, wobei ext_words Wörter speichert und ext_words_count die Anzahl jedes Wortes in ext_words verfolgt. Ziel ist es, einen Auslöser zu erstellen, der:
Erster Versuch:
Der vorgeschlagene erste Auslöser, der nur Aktualisierungen verarbeitet, lautet wie folgt:
DELIMITER $$ CREATE TRIGGER update_count AFTER UPDATE ON ext_words FOR EACH ROW BEGIN UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word; END; $$ DELIMITER ;
Dieser Auslöser aktualisiert jedoch nur vorhandene Wörter in ext_words_count und fügt keine neuen Wörter ein.
Aktualisierter Ansatz mit bedingten Anweisungen:
Die Verwendung von bedingten Anweisungen ist der Fall Es ist möglich, die Einfüge- und Aktualisierungsvorgänge in einem einzigen Trigger zu kombinieren:
DELIMITER $$ CREATE TRIGGER update_count AFTER INSERT ON ext_words FOR EACH ROW BEGIN IF NOT EXISTS (SELECT 1 FROM ext_words_count WHERE word = NEW.word) THEN INSERT INTO ext_words_count (word) VALUES (NEW.word); ELSE UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word; END IF; END $$ DELIMITER ;
Dieser Trigger wertet aus, ob das Wort bereits in ext_words_count vorhanden ist. Ist dies nicht der Fall, fügt der Trigger das Wort ein; andernfalls wird die Anzahl aktualisiert. Der Trigger wird nach jedem Einfügevorgang für die ext_words-Tabelle ausgeführt.
Zusätzliche Überlegungen:
Um Einfügungen zu verarbeiten, wird auch ein separater Trigger für den INSERT-Vorgang empfohlen:
DELIMITER $$ CREATE TRIGGER insert_word AFTER INSERT ON ext_words FOR EACH ROW BEGIN INSERT IGNORE INTO ext_words_count (word) VALUES (NEW.word); END; $$ DELIMITER ;
Dieser Trigger fügt das Wort einfach in ext_words_count ein, ohne zu berücksichtigen, ob es bereits existiert. Die INSERT IGNORE-Anweisung stellt sicher, dass doppelte Einfügungen ignoriert werden.
Schlussfolgerung:
Durch die Kombination der Einfüge- und Aktualisierungstrigger oder die Verwendung eines einzelnen Triggers mit bedingten Anweisungen ist dies möglich um die gewünschte Funktionalität zum Verfolgen der Wortanzahl in MySQL-Tabellen zu implementieren.
Das obige ist der detaillierte Inhalt vonWie implementiert man MySQL-Trigger zum Aktualisieren der Wortanzahl in zwei Tabellen bei Einfüge- und Aktualisierungsereignissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!