MySQL Trigger: Menetapkan Nilai untuk Baris BARU dan Mengemas kini Satu Lagi dalam Jadual Yang Sama
Dalam MySQL, pencetus ialah mekanisme berkuasa yang membolehkan anda melakukan tindakan tertentu apabila peristiwa tertentu berlaku dalam jadual. Satu kes penggunaan biasa adalah untuk menetapkan nilai untuk baris yang baru dimasukkan (BARU) sambil mengemas kini baris lain dalam jadual yang sama. Walau bagaimanapun, ralat biasa boleh berlaku semasa mencuba operasi ini:
RALAT 1442: Tidak dapat mengemas kini jadual 'pecah' dalam fungsi/pencetus tersimpan kerana ia sudah digunakan oleh pernyataan yang menggunakan fungsi/pencetus tersimpan ini.
Ralat ini timbul kerana pencetus tidak boleh mengemas kini jadual yang sama di mana ia dicetuskan. Untuk mengatasi had ini, ikut pendekatan alternatif ini:
Menggunakan Prosedur Tersimpan:
Daripada menggunakan pencetus, buat prosedur tersimpan yang mengendalikan operasi pemasukan dan kemas kini. Berikut ialah contoh:
<code class="sql">DELIMITER $$ CREATE PROCEDURE split_before_ins(IN startDate DATE, IN endDate DATE, IN tcOfficeFee DECIMAL, IN globalFee DECIMAL) BEGIN -- Insert a new row with the provided parameters INSERT INTO im.split (startDate, endDate, tcOfficeFee, globalFee) VALUES (startDate, endDate, tcOfficeFee, globalFee); -- Update the previous row's endDate UPDATE im.split SET endDate = DATE_SUB(startDate, INTERVAL 1 DAY) WHERE procKey = (SELECT procKey FROM im.split ORDER BY procKey DESC LIMIT 1) AND endDate = '20501231'; END$$ DELIMITER ;</code>
Penggunaan Prosedur:
Untuk menggunakan prosedur tersimpan, laksanakan yang berikut:
<code class="sql">CALL split_before_ins('2023-01-01', '2024-12-31', 10.00, 100.00);</code>
Prosedur tersimpan ini pendekatan membolehkan anda melaksanakan operasi yang diingini dalam konteks transaksi tunggal, mengelakkan ralat yang dihadapi apabila menggunakan pencetus untuk mengemas kini jadual yang sama dari mana ia dipanggil.
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Baris dalam Jadual yang Sama selepas Memasukkan Baris Baharu dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!