Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengemas kini Jadual Yang Sama Selepas Sisipan Tanpa Ralat Pencetus?

Bagaimanakah Saya Boleh Mengemas kini Jadual Yang Sama Selepas Sisipan Tanpa Ralat Pencetus?

Barbara Streisand
Barbara Streisandasal
2024-12-10 22:22:10838semak imbas

How Can I Update the Same Table After an Insert Without Trigger Errors?

Pencetus untuk Mengemas kini Jadual Sama selepas Sisipan: Pendekatan Alternatif

Isu Keseluruhan

Anda berusaha untuk melaksanakan pencetus pada jadual ACCOUNTS yang mengemas kini lajur dalam jadual yang sama berdasarkan nilai edit_on baris yang baru dimasukkan. Walau bagaimanapun, anda menghadapi ralat disebabkan oleh sekatan terhadap mengemas kini jadual yang sama dalam pencetus yang memanggilnya.

Penyelesaian Alternatif: Prosedur Tersimpan

Untuk memintas pengehadan ini, prosedur tersimpan boleh digunakan untuk melaksanakan kedua-dua operasi sisipan dan kemas kini dalam satu transaksi. Pendekatan ini membenarkan komit perubahan secara manual, membolehkan kemas kini yang diingini.

Pelaksanaan Prosedur Tersimpan

Berikut ialah contoh prosedur tersimpan yang mencapai matlamat anda:

DELIMITER $$
CREATE PROCEDURE InsertAndEditStatus(IN new_pk BIGINT)
BEGIN
  -- Insert new row into ACCOUNTS
  INSERT INTO ACCOUNTS (pk, user_id, edit_on, status)
  VALUES (new_pk, /* user_id */, NULL, 'A');
  
  -- Update existing row in ACCOUNTS
  UPDATE ACCOUNTS SET status='E' WHERE pk = NEW.edit_on;
  
  -- Commit transaction
  COMMIT;
END$$
DELIMITER ;

Penggunaan

Untuk digunakan prosedur tersimpan ini, panggilnya dengan kunci utama baris yang baru dimasukkan sebagai hujah:

CALL InsertAndEditStatus(2147483726);

Prosedur ini akan memasukkan baris baharu dengan kunci utama dan nilai lalai yang ditentukan, kemudian mengemas kini baris sedia ada yang dirujuk oleh lajur edit_on dalam baris yang baru disisipkan untuk menunjukkan bahawa ia telah diedit.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengemas kini Jadual Yang Sama Selepas Sisipan Tanpa Ralat Pencetus?. 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