Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Kemas Kini Jadual Dengan Selamat dalam Pencetus Selepas Kemas Kini pada Jadual Yang Sama dalam SQL?

Bagaimanakah Saya Boleh Kemas Kini Jadual Dengan Selamat dalam Pencetus Selepas Kemas Kini pada Jadual Yang Sama dalam SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-21 16:15:14950semak imbas

How Can I Safely Update a Table Within a Trigger After an Update on the Same Table in SQL?

Mengemas kini Jadual dalam Pencetus Selepas Kemas Kini pada Jadual Yang Sama

Dalam SQL, mengemas kini jadual dalam pencetus selepas kemas kini pada jadual yang sama membentangkan isu yang berpotensi. Ini kerana jadual sudah dikunci untuk operasi kemas kini dan cuba mengakses jadual dalam pencetus yang dilaksanakan sebagai sebahagian daripada transaksi yang sama boleh mengakibatkan konflik.

Untuk memintas sekatan ini, anda boleh mengemas kini lajur yang terjejas dalam pencetus dengan menggunakan pilihan SEBELUM dan bukannya SELEPAS. Ini membolehkan anda mengemas kini lajur jadual sebelum operasi kemas kini asal berlaku, memastikan bahawa perubahan yang diperlukan dibuat pada jadual sebelum transaksi dimuktamadkan.

Pertimbangkan contoh berikut:

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
;

Dalam contoh ini, pencetus akan dilaksanakan sebelum setiap operasi kemas kini pada jadual products_score. Ia akan mengira nilai baharu untuk lajur_jumlah undi berdasarkan nilai lajur yang dikemas kini (undi_1 hingga undi_5) dan menyimpannya dalam lajur maya_jumlah_undi baharu yang disediakan oleh konteks pencetus.

Apabila anda mengemas kini jadual , pencetus akan memastikan bahawa lajur votes_total dikemas kini dengan sewajarnya, walaupun kenyataan kemas kini tidak mengemas kini lajur votes_total secara eksplisit sendiri.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Kemas Kini Jadual Dengan Selamat dalam Pencetus Selepas Kemas Kini pada Jadual Yang Sama dalam SQL?. 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