Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan 'Tidak dapat mengemas kini jadual ... kerana ia sudah digunakan' Ralat dalam Pencetus MySQL?

Bagaimana untuk Menyelesaikan 'Tidak dapat mengemas kini jadual ... kerana ia sudah digunakan' Ralat dalam Pencetus MySQL?

Patricia Arquette
Patricia Arquetteasal
2024-12-27 18:51:13818semak imbas

How to Resolve

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!

Kenyataan:
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