Pencetus MySQL: mengesan perubahan data sebenar
Pencetus MySQL digunakan untuk melaksanakan operasi tertentu apabila data diubah suai. Walau bagaimanapun, menentukan sama ada data sebenarnya telah berubah menjadi satu cabaran apabila hanya perubahan data yang ketara mencetuskan tindakan. Kata kunci NEW
dan OLD
membenarkan perbandingan peringkat lajur, tetapi dalam jadual dengan banyak lajur, bergantung pada satu perbandingan boleh menjadi membosankan dan terdedah kepada ralat.
Pencetusan berasaskan cap masa
Salah satu cara untuk menyelesaikan masalah ini adalah dengan menggunakan cap masa untuk menentukan sama ada sebarang pengubahsuaian data telah berlaku. MySQL secara automatik mengemas kini lajur cap masa dengan masa semasa apabila baris dimasukkan atau diubah suai. Dengan membandingkan cap masa baharu dan lama, kami boleh menentukan sama ada sebarang perubahan telah dibuat.
Kaedah pelaksanaan
Untuk melaksanakan pencetus yang hanya dilaksanakan apabila data sebenar berubah, pertimbangkan langkah berikut:
NEW
dan OLD
. Tindakan pencetus hanya dilaksanakan jika cap masa berbeza. <code class="language-sql">CREATE TABLE foo ( a INT, b INT, ts TIMESTAMP ); CREATE TRIGGER ins_sum AFTER UPDATE ON foo FOR EACH ROW BEGIN IF NEW.ts != OLD.ts THEN INSERT INTO bar (a, b) VALUES(NEW.a, NEW.b); END IF; END;</code>
Contoh
Dalam contoh ini, jadual foo
mengandungi lajur ts
tambahan untuk menjejak cap masa. Pencetus ins_sum
dikonfigurasikan untuk memasukkan rekod ke dalam jadual bar
hanya apabila cap waktu baris yang dikemas kini berubah.
<code class="language-sql">-- 向'foo'表插入初始数据 INSERT INTO foo (a, b) VALUES (1, 1), (2, 2), (3, 3); -- 更新'foo'表,但未进行任何更改 UPDATE foo SET b = 3 WHERE a = 3; -- 验证触发器未执行 SELECT * FROM bar; -- 输出:空集(未检索到任何行) -- 使用实际更改更新'foo'表 UPDATE foo SET b = 4 WHERE a = 3; -- 验证触发器已执行 SELECT * FROM bar; -- 输出:包含数据的行(触发器操作已完成)</code>
Kelebihan menggunakan cap masa
Atas ialah kandungan terperinci Bagaimanakah Pencetus MySQL Boleh Mengesan Perubahan Data Sebenar dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!