Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengemas kini Baris dalam Jadual yang Sama selepas Memasukkan Baris Baharu dalam MySQL?

Bagaimana untuk Mengemas kini Baris dalam Jadual yang Sama selepas Memasukkan Baris Baharu dalam MySQL?

Linda Hamilton
Linda Hamiltonasal
2024-10-30 06:58:18795semak imbas

How to Update a Row in the Same Table after Inserting a New Row in MySQL?

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!

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