Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah saya boleh mengemas kini jadual yang sama dalam pencetus MySQL?

Bagaimanakah saya boleh mengemas kini jadual yang sama dalam pencetus MySQL?

Susan Sarandon
Susan Sarandonasal
2024-11-01 16:58:02930semak imbas

How can I update the same table within a MySQL trigger?

Penyelesaian Pencetus MySQL untuk Mengemas kini Jadual Sama

MySQL sememangnya mengehadkan pencetus daripada mengemas kini baris dalam jadual yang sama yang ditetapkan, menghalang panggilan rekursif . Walaupun pengehadan ini, penyelesaian yang berdaya maju wujud.

Penyelesaian Cadangan

Daripada mengemas kini baris secara langsung dalam pencetus, manfaatkan prosedur tersimpan yang melaksanakan logik yang diingini. Kaedah ini mengasingkan tugas kemas kini baris daripada pencetus dan membolehkan anda memintas sekatan.

Contoh

Pertimbangkan senario berikut:

<code class="sql">CREATE TABLE MyTable (
  id INT PRIMARY KEY,
  attribute VARCHAR(255)
);

-- Trigger to insert a row into MyTable for each new parent product record
CREATE TRIGGER my_trigger AFTER INSERT ON Products
FOR EACH ROW
BEGIN
  -- Issue SQL statement to call a stored procedure that performs the insert
  CALL insert_attribute(NEW.id, 'Value');
END;</code>

Dalam contoh di atas, pencetus my_trigger memanggil prosedur tersimpan insert_attribute untuk memasukkan baris ke dalam MyTable apabila rekod baharu dimasukkan ke dalam jadual Produk, dengan berkesan meniru kefungsian kemas kini baris langsung dalam pencetus.

Pertimbangan Tambahan

Walaupun penyelesaian ini berfungsi sebagai penyelesaian berfungsi, adalah penting untuk ambil perhatian bahawa ia berbeza daripada pencetus tradisional dari segi prestasi dan kebolehselenggaraan. Prosedur tersimpan boleh memperkenalkan overhed dan kerumitan tambahan kepada sistem pangkalan data berbanding dengan kemas kini pencetus langsung.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengemas kini jadual yang sama 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