Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Melaksanakan Pencetus MySQL untuk Mengemas kini Kiraan Perkataan dalam Dua Jadual pada Acara Sisipan dan Kemas Kini?

Bagaimana untuk Melaksanakan Pencetus MySQL untuk Mengemas kini Kiraan Perkataan dalam Dua Jadual pada Acara Sisipan dan Kemas Kini?

DDD
Lepaskan: 2024-11-19 09:14:02
asal
553 orang telah melayarinya

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

MySQL Pencetus untuk Pada Sisipan/Kemas Kini Acara

Senario:

Pertimbangkan dua jadual, ext_words dan ext_words_count, tempat ext_words menyimpan perkataan dan ext_words_count menjejaki kiraan setiap perkataan dalam ext_words. Matlamatnya adalah untuk mencipta pencetus yang:

  • Mengemas kini ext_words_count.count apabila perkataan dalam ext_words dikemas kini.
  • Jika perkataan itu tidak wujud dalam ext_words_count, masukkan ke dalam ext_words_count dan menetapkan kiraan kepada 1.

Percubaan Awal:

Pencetus awal yang dicadangkan, yang hanya mengendalikan kemas kini, adalah seperti berikut:

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 ;
Salin selepas log masuk

Walau bagaimanapun , pencetus ini hanya mengemas kini perkataan sedia ada dalam ext_words_count dan gagal memasukkan baharu perkataan.

Pendekatan Kemas Kini dengan Pernyataan Bersyarat:

Menggunakan pernyataan bersyarat, adalah mungkin untuk menggabungkan operasi sisipan dan kemas kini menjadi satu pencetus:

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 ;
Salin selepas log masuk

Pencetus ini menilai sama ada perkataan itu sudah wujud dalam ext_words_count. Jika tidak, pencetus memasukkan perkataan; jika tidak, ia mengemas kini kiraan. Pencetus dilaksanakan selepas setiap operasi sisipan pada jadual ext_words.

Pertimbangan Tambahan:

Untuk mengendalikan sisipan, pencetus berasingan untuk operasi INSERT juga disyorkan:

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 ;
Salin selepas log masuk

Pencetus ini hanya memasukkan perkataan ke dalam ext_words_count tanpa mempertimbangkan sama ada ia sudah wujud. Pernyataan INSERT IGNORE memastikan sisipan pendua diabaikan.

Kesimpulan:

Dengan menggabungkan pencetus sisipan dan kemas kini atau menggunakan pencetus tunggal dengan pernyataan bersyarat, adalah mungkin untuk melaksanakan fungsi yang diingini untuk menjejaki bilangan perkataan dalam jadual MySQL.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pencetus MySQL untuk Mengemas kini Kiraan Perkataan dalam Dua Jadual pada Acara Sisipan dan Kemas Kini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan