Heim  >  Artikel  >  Datenbank  >  Wie implementiert man MySQL-Trigger zum Aktualisieren der Wortanzahl in zwei Tabellen bei Einfüge- und Aktualisierungsereignissen?

Wie implementiert man MySQL-Trigger zum Aktualisieren der Wortanzahl in zwei Tabellen bei Einfüge- und Aktualisierungsereignissen?

DDD
DDDOriginal
2024-11-19 09:14:02483Durchsuche

How to Implement MySQL Triggers for Updating Word Counts in Two Tables on Insert and Update Events?

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:

  • ext_words_count.count aktualisiert, wenn ein Wort in ext_words aktualisiert wird.
  • Wenn das Wort nicht in ext_words_count vorhanden ist, wird es in ext_words_count eingefügt und setzt den Zähler auf 1.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn