Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengekalkan Kiraan Perkataan dengan Cekap Menggunakan Pencetus MySQL dalam Senario Sisipan/Kemas kini?

Bagaimana untuk Mengekalkan Kiraan Perkataan dengan Cekap Menggunakan Pencetus MySQL dalam Senario Sisipan/Kemas kini?

DDD
Lepaskan: 2024-11-11 22:33:03
asal
503 orang telah melayarinya

How to Efficiently Maintain Word Counts Using MySQL Triggers in Insert/Update Scenarios?

MySQL Pencetus untuk Manipulasi Data yang Cekap dalam Senario Sisipan/Kemas Kini

Pertimbangkan dua jadual: ext_words dan ext_words_count. Matlamatnya ialah untuk mencipta pencetus yang mengekalkan kiraan perkataan dalam ext_words_count setiap kali jadual ext_words dikemas kini.

Untuk tugasan ini, anda pada mulanya cuba menggunakan satu pencetus:

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 tidak mengambil kira kes di mana perkataan yang dikemas kini tidak wujud dalam ext_words_count. Untuk menangani perkara ini, anda mempertimbangkan untuk menggunakan pencetus berasingan untuk operasi sisipan dan kemas kini:

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 ;

DELIMITER $$
CREATE TRIGGER update_word 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

Walaupun pencetus sisipan berfungsi dengan jayanya, pencetus kemas kini masih gagal meningkatkan kiraan.

Akhirnya, anda menemui penyelesaian alternatif menggunakan pernyataan bersyarat dalam 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 menyemak sama ada perkataan wujud dalam ext_words_count. Jika tidak, ia memasukkan perkataan ke dalam jadual. Jika tidak, ia menambah bilangan perkataan yang sepadan. Dengan memanfaatkan pernyataan bersyarat, anda kini boleh mengekalkan kiraan perkataan dengan cekap menggunakan satu pencetus.

Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Kiraan Perkataan dengan Cekap Menggunakan Pencetus MySQL dalam Senario Sisipan/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