Kemas Kini Pencetus Selepas Kemas Kini Jadual Sama
Dalam sistem pangkalan data, pencetus digunakan untuk melakukan tindakan tertentu secara automatik apabila peristiwa tertentu berlaku dalam jadual. Satu cabaran biasa timbul apabila cuba mengemas kini jadual yang sama dari dalam pencetus selepas kemas kini pada jadual itu.
Pertimbangkan pencetus berikut:
CREATE TRIGGER upd_total_votes AFTER UPDATE ON products_score FOR EACH ROW UPDATE products_score SET products_score.votes_total = (SELECT (votes_1 + votes_2 + votes_3 + votes_4 + votes_5) FROM products_score WHERE id = new.id);
Apabila cuba mengemas kini jadual seperti berikut :
UPDATE products_score SET votes_1 = 5 WHERE id = 0;
pencetus gagal dengan ralat:
#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Untuk menyelesaikannya, pencetus mesti diubah suai untuk dilaksanakan sebelum acara kemas kini, bukannya selepas. Ini membolehkan pencetus mengemas kini jadual sebelum pernyataan kemas kini asal digunakan:
CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score FOR EACH ROW BEGIN SET new.votes_total = new.votes_1 + new.votes_2 + new.votes_3 + new.votes_4 + new.votes_5; END;
Dengan pengubahsuaian ini, mengemas kini jadual seperti sebelum ini akan berjaya mencetuskan lajur_jumlah undian untuk dikemas kini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencegah Ralat 'Tidak dapat mengemas kini jadual dalam fungsi/pencetus tersimpan' Apabila Menggunakan Pencetus Selepas Kemas Kini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!