Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mencegah Ralat 'Tidak dapat mengemas kini jadual dalam fungsi/pencetus tersimpan' Apabila Menggunakan Pencetus Selepas Kemas Kini?

Bagaimanakah Saya Boleh Mencegah Ralat 'Tidak dapat mengemas kini jadual dalam fungsi/pencetus tersimpan' Apabila Menggunakan Pencetus Selepas Kemas Kini?

Linda Hamilton
Lepaskan: 2024-12-26 22:28:14
asal
702 orang telah melayarinya

How Can I Prevent

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);
Salin selepas log masuk

Apabila cuba mengemas kini jadual seperti berikut :

UPDATE products_score SET votes_1 = 5 WHERE id = 0;
Salin selepas log masuk

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.
Salin selepas log masuk

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;
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan