Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengemas kini Jadual Yang Sama Selepas Sisipan Tanpa Ralat Pencetus?
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!