Gangguan Pencetus semasa Mengemas kini Jadual: Menyelesaikan Isu
Dalam pengaturcaraan pangkalan data, kadangkala perlu mengemas kini lajur jadual menggunakan pencetus selepas operasi kemas kini pada jadual yang sama. Walau bagaimanapun, ini boleh membawa kepada ralat jika pencetus cuba mengemas kini jadual semasa ia sedang dikemas kini.
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 operasi kemas kini dilakukan menggunakan pencetus ini, ralat "#1442 - Tidak dapat mengemas kini jadual 'products_score' dalam fungsi/pencetus yang disimpan kerana ia telah digunakan oleh pernyataan yang memanggil ini disimpan function/trigger" ditemui.
Untuk menyelesaikan isu ini, tukar pemasaan pencetus kepada SEBELUM dan bukannya SELEPAS. Ini membolehkan pencetus untuk melaksanakan sebelum operasi kemas kini, mengelakkan jadual dikunci semasa kemas kini. Pencetus yang dikemas kini sepatutnya kelihatan seperti ini:
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 pencetus yang diubah suai ini, lajur jadual boleh berjaya dikemas kini selepas operasi kemas kini.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan 'Tidak dapat mengemas kini jadual ... kerana ia sudah digunakan' Ralat dalam Pencetus MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!